Unidad 4 Control de Transacciones

Documentos relacionados
PROGRAMA ACADÉMICO DE TECNOLOGÍAS DE LA INFORMACIÓN. actividad Transacciones en MySQL. como requerimiento parcial para acreditar la asignatura de

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Unidad 2 Lenguaje de Definición de Datos (DDL) 2.1 Creación de base de datos. 2.2 Creación de tablas.

Manejo de Transacciones

TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

Bases de Datos / Elementos de Bases de Datos 2015

Práctica 4: Estudio del SGBD Oracle 10 Gestión de Transacciones

Recuperación del Sistema

Transacciones en SQL. Lic. Gerardo Rossel

El Sistema Gestor de Base de Datos (DBMS)

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

Asignatura: Administración de Bases de Datos. Pedro P. Alarcón Cavero

Capítulo 5. Edición de datos

6. PROGRAMACIÓN CON TRANSACT-SQL

Transacciones. M. Andrea Rodríguez-Tastets. II Semestre Universidad de Concepción,Chile andrea

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

Tema 33. El lenguaje SQL

Transacciones, copias de seguridad. Xochitl Clemente Parra Armando Méndez Morales

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DML. Ing. Alfonso Vicente, PMP

Formato para prácticas de laboratorio

Transacción. Introducción a los conceptos del Procesamiento de las Transacciones. Monousuarios vs. Multiusuarios. Pablo Turjanski.

Contenido Manejo de Concurren en Mysql... 2 Modos de bloqueo InnoDB... 2 InnoDB y AUTOCOMMIT... 3

Transacciones y concurrencia. Sistemas de persistencia de objetos

Computación Web (Curso 2015/2016)

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

Formato para prácticas de laboratorio

Técnicas para la enseñanza de. Desarrollo Web. PH P - m ysqli. Liliana Gutiérrez Flores. Enero de 2016

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

BASES de DATOS ÁCTIVAS

Tema 6. Transacciones y seguridad

Guía de estudio para el examen. Sean tres atributos A, B y C. Indique, para cada par de transacciones T1 y T2, si se garantiza que A+B+C no cambia.

Sistemas de Información II Tema 2. Sistemas gestores de bases de datos Bibliografía: Elmasri y Navathe: Fundamentos de Sistemas de Bases de Datos 3ª

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Tema: Disparadores Parte I.

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

BD Relacionales. Introducción. Marta Zorrilla

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Guía Taller I Conexión con la Base de Datos Introducción a PostgreSQL

Transacciones, Recuperación y Control de Concurrencia

Cursores, Triggers, Indices, Transacciones, Vistas Gestión y Modelación de Datos

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Recuperación de Fallos del Sistema

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

MANUALITO MS-SQL SERVER

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

RICHARD ALEXANDER BETANCUR SIERRA

SQLModificaciones a la BD

T ema 2. S is tem as ges tores de bas es de datos

OBJETIVOS METODOLOGÍA PROCEDIMIENTO 1.- Trabajo con el servidor de bases de datos Sybase

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

Conceptos sobre procesamiento de transacciones. Tema 3: Bases de Datos II

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Laboratorio Informix. Stored Procedures Triggers

Transacciones. Carlos A. Olarte BDII

Ejemplo de gestión de datos con SQL

Restricciones de Integridad

LABORATORIO 10. Concurrencia y bloqueos en el SMBD Oracle

Principales rutinas de mantenimiento

Tema 1. Bases de datos activas

PROGRAMA ACADÉMICO DE TECNOLOGÍAS DE LA INFORMACIÓN MANUAL SINTAXIS DE LOS COMANDOS PARA UNA TRANSACCION BASES DE DATOS PARA APLICACIONES

Revista Electrónica Granma Ciencia. Vol.10, No.2, Mayo - Agosto de 2006 ISSN X

Número de Práctica: 1 Nombre de la Práctica: Comunicación Cliente Servidor Vía Sockets Java con Sistema Manejador de Bases de Datos

Sistemas Informáticos I Resumen

Introducción al SQL embebido

MANUAL DE PROGRAMACIÓN PARA BASES DE DATOS 1.0 MySQL

mysql Departamento de Lenguajes y Computación Universidad de Almería mysql Contenidos

INTRODUCCION. entidades. Modelo lógico de la base de datos. Matricula. carne. codigo_curso. año semestre nota. propiedades

InterBase / Firebird: el uso de eventos

Base de Datos Conjunto de información organizada especialmente para búsqueda y entrada de datos. Base de Datos: Ejemplo Usuarios

Formato para prácticas de laboratorio

Motores de almacenamiento en MySQL 5.0 por Mario López y Juan A. Sánchez

LABORATORIO 10. Concurrencia y bloqueos en el SMBD SQL Server

Checks, Triggers y Excepciones en InterBase: validando desde la base de datos

Conceptos de Bases de Datos Relacionales Triggers

Muchos manejadores de bases de datos (DBMSs) cuentan con sistemas de recuperación ante fallos, que permiten dejar la base de datos en estado

Tema 4. SQL. Juan Ignacio Rodríguez de León

PROCEDIMIENTOS ALMACENADOS

TRIGGER LEONEL CADOSO ROMERO 1

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

Bases de Datos Relacionales. Conceptos y consideraciones para su uso.

UNIVERSIDAD DON BOSCO

Base de Datos. Docente: Ing. Francisco Rodríguez BASE DATOS. Resultados. Internet. Requerimientos

Sistemas de Datos Curso: Ernesto Chinkes. SQL Básico Algebra Relacional

Modificación de datos

TEMA 4.4: Recuperación ante fallos

Lenguaje para descripción de datos

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

Sistemas de Bases de Datos II ITS / ITSB EMT CETP

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

Historia de SQL. Historia de SQL. Introducción. Los primeros años. E. F. Codd, Investigador de IBM (1970) grandes bancos de datos compartidos»

DESARROLLO WEB EN ENTORNO SERVIDOR

Diseño de bases de datos

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Implementación de Triggers en Firebird/Interbase SQL Server

SQL EMBEBIDO FELIPE GARCÍA GÓMEZ

BASES DE DATOS - SQL. Javier Enciso

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Gestión de Segmentos de Rollback. Qué es una transacción? Secuencia de operaciones que han de ejecutarse de forma atómica.

Transcripción:

Unidad 4 Control de Transacciones e Instrucción COMMIT. 4.2 Instrucción ROLLBACK. 4.3 Niveles de aislamiento. 4.4 Grados de consistencia. ISC Ing. Felipe Alanís González -ITD- 1 Cada vez que se ejecuta INSERT, UPDATE, DELETE, los datos se escriben a las tablas de la Base de Datos inmediatamente. Se dice que se entregan (commit). En castellano algunos la traducen incorrectamente como comprometer los datos ISC Ing. Felipe Alanís González -ITD- 2

Este proceso de entrega automática, es conveniente en la mayoría de los casos pero en otros definitivamente no. Analizaremos algunas situaciones para comprobar que el automatic commit no siempre produce buenos resultados. ISC Ing. Felipe Alanís González -ITD- 3 Ejemplo A1 1. Crear una Base de Datos llamada LaConsentida. create database LaConsentida 2. Crear una tabla: create table CtasBanc (idcuenta int(10) auto_increment primary key, saldo numeric(10,2)) ISC Ing. Felipe Alanís González -ITD- 4

3. Añadir 2 tuplas: insert into CtasBanc values (0,1000) insert into CtasBanc values (0,9000) 4. Consulte el contenido de la tabla: select * from CtasBanc La miscelánea La Consentida posee dos cuentas bancarias, la primera es una cuenta de cheques ($1,000.00) y la segunda es de inversión ($9,000.00). ISC Ing. Felipe Alanís González -ITD- 5 En este momento la BD está en un estado consistente porque el dueño de la miscelanea sabe que posee $10,000 en total ya que ese día no hará depósitos ni retiros de ninguna de las cuentas. Lo que el si podrá hacer es traspasos entre ambas cuentas, pero el dinero que posee en total siempre será $10,000.00 (al menos por ese día). ISC Ing. Felipe Alanís González -ITD- 6

6. Conéctese a la BD mediante el Cliente de Línea de Comandos y por otro lado mediante la interfase GUI, ya que los siguientes pasos requieren una simulación de dos usuarios. Haga un retiro de $2,000 de la inversión para depositarse en la cuenta de cheques update CtasBanc set saldo=saldo-2000 update CtasBanc set saldo=saldo+2000 where idcuenta=1; ISC Ing. Felipe Alanís González -ITD- 7 Lo anterior hágalo desde el Cliente Línea de Comandos y observe el resultado desde la Interfase GUI. select * from CtasBanc Como verá, los datos son entregados inmediatamente a la BD, por esa razón el Cliente GUI puede ver el resultado. ISC Ing. Felipe Alanís González -ITD- 8

7. Haga otro traspaso (retiro/depósito) en Línea de Comandos y consulte desde GUI después de cada update. update CtasBanc set saldo=saldo-500 select * from CtasBanc update CtasBanc set saldo=saldo+500 where idcuenta=1; select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 9 Observe que cuando el Cliente Línea de Comandos hace el retiro y GUI consulta, la BD está inconsistente (el dinero total que aparentemente hay, no es correcto). Ahora, imagine que después del retiro y antes del depósito se presenta una falla en el equipo y se apaga. ISC Ing. Felipe Alanís González -ITD- 10

8. Un traspaso más. update CtasBanc set saldo=saldo-500 {desconecte el equipo de la energía} (simulando una falla) 9. Encienda el equipo y conectese a la BD. ISC Ing. Felipe Alanís González -ITD- 11 10.Consulte los saldos de las cuentas: select * from CtasBanc Es consistente el estado de la Base de Datos? ISC Ing. Felipe Alanís González -ITD- 12

Ejemplo A2 1. Partamos de los saldos iniciales: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 2. Consulte saldos: select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 13 3. Inicie un traspaso de la forma siguiente: start transaction; update CtasBanc set saldo=saldo-2000 {desconecte el equipo de la energía eléctrica} 4. Encienda el equipo, conectese a la BD y consulte saldos. Es consistente el estado de la Base de Datos? ISC Ing. Felipe Alanís González -ITD- 14

Ejemplo A3 1. Partamos de los saldos iniciales: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 2. Consulte saldos: select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 15 3. Realice un traspaso de la forma siguiente: start transaction; update CtasBanc set saldo=saldo-3000 update CtasBanc set saldo=saldo+3000 commit; where idcuenta=1; {desconecte el equipo de la energía eléctrica} ISC Ing. Felipe Alanís González -ITD- 16

4. Encienda el equipo, conectese a la BD y consulte saldos. Es consistente el estado de la Base de Datos? Se llevó a cabo el traspaso? Si hubiéramos omitido commit, cúal sería el resultado? ISC Ing. Felipe Alanís González -ITD- 17 Ejemplo A4 1. Partamos de los saldos iniciales: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 2. Consulte saldos: select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 18

3. Haga un traspaso en Línea de Comandos de la siguiente manera y consulte desde GUI después de cada update. start transaction; select * from CtasBanc update CtasBanc set saldo=saldo-4000 select * from CtasBanc select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 19 update CtasBanc set saldo=saldo+4000 where idcuenta=1; select * from CtasBanc select * from CtasBanc commit; select * from CtasBanc select * from CtasBanc ISC Ing. Felipe Alanís González -ITD- 20

Ejemplo B1 1. Crear una Base de Datos llamada CBTIS999. create database CBTIS999 2. Crear las siguientes tablas: create table Alumnos (IdAlumno int auto_increment primary key, Nombre char(40), NumMatCursadas int); create table Materias (IdMateria int auto_increment primary key, Nombre char(20)); create table MatCursadas (IdAlumno int, IdMateria int); ISC Ing. Felipe Alanís González -ITD- 21 3. Añadir a las tablas siguientes las tuplas suficientes para que queden como se muestra (la tercera tabla no llevará tuplas): Alumnos IdAlumno Nombre NumMatCursadas 1 Mickey Mouse 0 2 Atom ic Ant 0 3 Donald Duck 0 Materias IdMateria Nombre 1 Modales 2 Oratoria 3 Algebra 4 Lectura y Redacción MatCursadas IdAlumno IdMateria ISC Ing. Felipe Alanís González -ITD- 22

En este momento la BD está en un estado consistente porque en la tabla MatCursadas y en el atributo NumMatCursadas de la tabla Alumnos se refleja que ningún alumno ha cursado ninguna materia. Este esquema tiene datos redundantes porque el número de materias cursadas se puede obtener en cualquier momento mediante una consulta, sin embargo, a veces es deseable diseñar de esta manera cuando la complejidad de los esquemas es grande (aunque este no sea el caso sirve como ejemplo). Para mantener la consistencia, es indispensable que los datos redundantes se incluyan en una transacción. ISC Ing. Felipe Alanís González -ITD- 23 6. Conéctese a la BD mediante el Cliente de Línea de Comandos y por otro lado mediante la interfase GUI, ya que los siguientes pasos requieren una simulación de dos usuarios. Realice las operaciones que se indican a continuación (desde Línea de Comandos): insert into MatCursadas values (3,2); update Alumnos set NumMatCursadas=NumMatCursadas+1 where IdAlumno=3; ISC Ing. Felipe Alanís González -ITD- 24

Observe el resultado desde la Interfase GUI. select * from MatCursadas select * from Alumnos Como verá, los datos son entregados inmediatamente a la BD, por esa razón el Cliente GUI puede ver el resultado. ISC Ing. Felipe Alanís González -ITD- 25 7. Ejecute otras dos instrucciones en Línea de Comandos y consulte desde GUI después de cada una de ellas. insert into MatCursadas values (1,1); select * from MatCursadas select * from Alumnos ISC Ing. Felipe Alanís González -ITD- 26

update Alumnos set NumMatCursadas=NumMatCursadas+1 where IdAlumno=1; select * from MatCursadas select * from Alumnos Observe que cuando el Cliente Línea de Comandos hace la primera operación y GUI hace las consultas, la BD está inconsistente, ahora imagine que antes de la ejecución de las segunda operación se presenta una falla en el equipo y se apaga. ISC Ing. Felipe Alanís González -ITD- 27 8. Otra materia cursada: insert into MatCursadas values (3,4); {desconecte el equipo de la energía} (simulando una falla) 9. Encienda el equipo y conectese a la BD. ISC Ing. Felipe Alanís González -ITD- 28

10.Consulte el estado de las tablas: select * from MatCursadas select * from Alumnos Es consistente el estado de la Base de Datos? ISC Ing. Felipe Alanís González -ITD- 29 Ejemplo B2 1. Partamos del estado inicial de las tablas: Alumnos IdAlumno Nombre NumMatCursadas 1 Mickey Mouse 0 2 Atom ic Ant 0 3 Donald Duck 0 Materias IdMateria Nombre 1 Modales 2 Oratoria 3 Algebra 4 Lectura y Redacción MatCursadas IdAlumno IdMateria ISC Ing. Felipe Alanís González -ITD- 30

2. Inicie las operaciones de la forma siguiente: start transaction; insert into MatCursadas values (3,2); {desconecte el equipo de la energía eléctrica} 3. Encienda el equipo, conectese a la BD y consulte el contenido de las tablas. select * from MatCursadas select * from Alumnos Es consistente el estado de la Base de Datos? ISC Ing. Felipe Alanís González -ITD- 31 Ejemplo B3 1. Partamos del estado inicial: Alumnos IdAlumno Nombre NumMatCursadas 1 Mickey Mouse 0 2 Atom ic Ant 0 3 Donald Duck 0 Materias IdMateria Nombre 1 Modales 2 Oratoria 3 Algebra 4 Lectura y Redacción MatCursadas IdAlumno IdMateria ISC Ing. Felipe Alanís González -ITD- 32

2. Registre otra materia cursada pero ahora de la forma siguiente: start transaction; insert into MatCursadas values (3,2); update Alumnos set NumMatCursadas=NumMatCursadas+1 where IdAlumno=3; commit; {desconecte el equipo de la energía eléctrica} ISC Ing. Felipe Alanís González -ITD- 33 3. Encienda el equipo, conectese a la BD y consulte el estado de las tablas. Es consistente el estado de la Base de Datos? Se efectuaron las operaciones? Si hubiéramos omitido commit, cúal sería el resultado? ISC Ing. Felipe Alanís González -ITD- 34

Ejemplo B4 1. Partamos del estado inicial una vez más: Alumnos IdAlumno Nombre NumMatCursadas 1 Mickey Mouse 0 2 Atom ic Ant 0 3 Donald Duck 0 Materias IdMateria Nombre 1 Modales 2 Oratoria 3 Algebra 4 Lectura y Redacción MatCursadas IdAlumno IdMateria ISC Ing. Felipe Alanís González -ITD- 35 2. Haga las operaciones en Línea de Comandos como se indica y consulte desde GUI después de cada una. start transaction; insert into MatCursadas values (3,2); select * from MatCursadas select * from Alumnos select * from MatCursadas select * from Alumnos ISC Ing. Felipe Alanís González -ITD- 36

update Alumnos set NumMatCursadas=NumMatCursadas+1 where IdAlumno=3; select * from MatCursadas select * from Alumnos select * from MatCursadas select * from Alumnos commit; select * from MatCursadas select * from Alumnos ISC Ing. Felipe Alanís González -ITD- 37 Propiedades de las transacciones: Atomicidad Consistencia Aislamiento (Isolation) Durabilidad Se les conoce como propiedades ACID. ISC Ing. Felipe Alanís González -ITD- 38

1. Atomicidad. Se requiere que todas las operaciones de una transacción sean entregadas (commited) a la base de datos. En caso de que una de ellas no sea entregada por cualquier razón, ninguna debe hacerse. ISC Ing. Felipe Alanís González -ITD- 39 2. Consistencia. Se requiere que si antes de ejecutar una transacción, la BD es consistente, permanezca igualmente consistente una vez terminada la transacción. ISC Ing. Felipe Alanís González -ITD- 40

3. Aislamiento. Si se presenta la ejecución concurrente de transacciones, cada una de ellas debe tener la impresión de que las demás no existen, como si se ejecutaran en serie (una después de la otra). ISC Ing. Felipe Alanís González -ITD- 41 4. Durabilidad. Es indispensable que una vez finalizada la transacción y los datos entregados a la BD, estos no se pierdan incluso aunque se produzca una falla. ISC Ing. Felipe Alanís González -ITD- 42

4.2 Instrucción ROLLBACK Ejemplo A5 1. Abra una sesión, no importa si es en Línea de Comandos o en GUI Tools, para simular el retroceso de transacciones. 2. A partir de los saldos iniciales: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 select * from CtasBanc; ISC Ing. Felipe Alanís González -ITD- 43 4.2 Instrucción ROLLBACK 3. Haga el siguiente traspaso: start transaction; select * from CtasBanc; update CtasBanc set saldo=saldo-15000 update CtasBanc set saldo=saldo+15000 where idcuenta=1; select * from CtasBanc; rollback; select * from CtasBanc; ISC Ing. Felipe Alanís González -ITD- 44

4.2 Instrucción ROLLBACK Rollback termina una transación sin entregar los datos a la BD. Ejecutar rollback es lo adecuado para este caso ya que si el usuario trata de retirar más dinero del que tiene en la cuenta de cheques, el saldo de esa cuenta quedará NEGATIVO, lo que es incorrecto ya que las cuentas de cheques son cuentas de débito (aunque la consistencia se mantuvo porque la suma de las cuentas seguía siendo $10,000). ISC Ing. Felipe Alanís González -ITD- 45 4.2 Instrucción ROLLBACK La siguiente es una propuesta de seudocódigo para transacciones como la de nuestro ejemplo. Instrucciones como estas deberían ser ejecutadas cada vez que se haga una transacción para evitar datos erróneos (por ejemplo saldo negativo en cuentas de cheques o de inversiones como las de nuestro ejemplo). start transaction; update CtasBanc set saldo=saldo-15000 update CtasBanc set saldo=saldo+15000 where idcuenta=1; If SaldoCuenta(2)<0 then else rollback commit end if SaldoCuenta() es una función escrita por nosotros, es indispensable hacer esta verificación ya que cuando terminen las transacciones que iniciaron antes que la nuestra, tal vez no haya saldo suficiente en la cuenta #2 para para traspasar a la #1. Vea la propiedad 4 (Aislamiento). ISC Ing. Felipe Alanís González -ITD- 46

u2 4.3 Niveles de Aislamiento Un Nivel de Aislamiento describe el grado en el cual los datos que están siendo manipulados por una sesión son visibles para otras: Serializable (En serie). Repeatable Read (Lectura Repetible) Read Committed (Leer Entregados). Read Uncommitted (Leer NoEntregados). ISC Ing. Felipe Alanís González -ITD- 47 Diapositiva 47 u2 PARA PONER UNA DESCRIPCION SIMPLE DE LOS NIVELES DE AISLAMIENTO, BUSCAR EN GOOGLE "REPEATABLE READ" EN WIKIPEDI VIENE ALGO... DE ESA MANERA PODRIA PONER ALGUNOS EJEMPLOS MAS usuario, 06/11/2007

u2 4.3 Niveles de Aislamiento Cada Nivel de Aislamiento tiene un comportamiento distinto con respecto a los demás, pero en algunos de los aspectos básicos, es muy similar a los demás. Los ejemplos siguientes ayudan a entender la característica principal de algunos de ellos. ISC Ing. Felipe Alanís González -ITD- 48 Diapositiva 48 u2 PARA PONER UNA DESCRIPCION SIMPLE DE LOS NIVELES DE AISLAMIENTO, BUSCAR EN GOOGLE "REPEATABLE READ" EN WIKIPEDI VIENE ALGO... DE ESA MANERA PODRIA PONER ALGUNOS EJEMPLOS MAS usuario, 06/11/2007

4.3 Niveles de Aislamiento Ejemplo A6 1. Abra 2 sesiones, una usando Línea de Comandos y otra GUI Tools. 2. Partamos de los saldos acostumbrados: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 ISC Ing. Felipe Alanís González -ITD- 49 4.3 Niveles de Aislamiento 3. Consulte saldos: select * from CtasBanc; select * from CtasBanc; 4. Inicie un traspaso en Línea de Comandos: start transaction; update CtasBanc set saldo=saldo-6000 update CtasBanc set saldo=saldo+6000 where idcuenta=1; ISC Ing. Felipe Alanís González -ITD- 50

4.3 Niveles de Aislamiento 5. En GUI Tools intente modificar una de las cuentas: update CtasBanc set saldo=0 {espere un tiempo prudente} Registre sus observaciones. ISC Ing. Felipe Alanís González -ITD- 51 4.3 Niveles de Aislamiento Ejemplo A7 1. Abra 2 sesiones, una usando Línea de Comandos y otra GUI Tools. 2. Asegúrese que el nivel de aislamiento en la sesión 1 sea Serializable (significa En Serie): select @@global.tx_isolation; select @@tx_isolation; ISC Ing. Felipe Alanís González -ITD- 52

4.3 Niveles de Aislamiento 3. Si se requiere, cambie el nivel de aislamiento de la siguiente forma: set session transaction isolation level serializable; set global transaction isolation level serializable; Puede comprobar el resultado: select @@global.tx_isolation; select @@tx_isolation; ISC Ing. Felipe Alanís González -ITD- 53 4.3 Niveles de Aislamiento 4. A partir de los saldos iniciales: update CtasBanc set saldo=1000 where idcuenta=1; update CtasBanc set saldo=9000 Consulte saldos: select * from CtasBanc; select * from CtasBanc; ISC Ing. Felipe Alanís González -ITD- 54

4.3 Niveles de Aislamiento 5. Haga un traspaso en Línea de Comandos: start transaction; update CtasBanc set saldo=saldo-6000 update CtasBanc set saldo=saldo+6000 where idcuenta=1; ISC Ing. Felipe Alanís González -ITD- 55 4.3 Niveles de Aislamiento 6. En GUI Tools consulte los saldos antes y después de terminar la transacción (en Línea de Comandos): select * from CtasBanc; commit; select * from CtasBanc; Registre sus observaciones. ISC Ing. Felipe Alanís González -ITD- 56

4.3 Niveles de Aislamiento Ejemplos A8 y A9 Realice los mismos pasos del Ejemplo 7 (como está con commit, ejemplo A8, y reemplazando el commit con rollback, ejemplo A9), solo asegúrese que el nivel de aislamiento en la Sesión de Línea de Comandos sea: Read Uncommitted, Leer NoEntregas (Lectura de datos no entregados). ISC Ing. Felipe Alanís González -ITD- 57