Sesiรณn 1
Transacciones
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Transacción: es una unidad única de trabajo. Si una transacción tiene éxito, todas las modificaciones de los datos realizadas durante la transacción se confirman y se convierten en una parte permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Atomicidad: La atomicidad dentro de las bases de datos es la capacidad de realizar un conjunto de instrucciones como si se tratara de una sola cosa, de forma indivisible.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Operación de transferencia de fondos de un banco. Tabla: cuentas numero_cuenta nombre 140000Oscar Lozano Pérez 140001Daniela Lozano Pérez
saldo 10000 1500
Tabla simplificada de las “cuentas” del “banco”.
Oscar y Daniela Lozano Pérez son hermanos y Daniela le pide un préstamo a Oscar de $2000.00 para pagar su colegiatura de la Universidad. Esos serian los pasos que debe realizar el sistema del banco para realizar la transferencia de fondos.
1. Retirar fondos de la cuenta origen. 2. Depositar fondos en la cuenta destino
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 1: Escribe el código para realizar la operación de transferencia de fondos entre ambas cuentas.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Operación de transferencia de fondos de un banco. Tabla: cuentas numero_cuenta nombre 140000Oscar Lozano Pérez 140001Daniela Lozano Pérez
saldo 10000 1500
Tabla simplificada de las “cuentas” del “banco”.
Estas son las operaciones en T-SQL que el banco debe realizar. declare @monto_transferencia as money set @monto_transferencia = 2000 update cuentas set saldo = saldo - @monto_transferencia where numero_cuenta = 140000 update cuentas set saldo = saldo + @monto_transferencia where numero_cuenta = 140001
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 2: Escribe en tu libreta cuales serían las consecuencias de no validar la información antes de realizar una transferencia de fondos entre dos cuentas. ¿Cuáles serían las consecuencias de que un proceso de varios pasos no se ejecutara como transacción atómica?
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Estado de las tablas antes del alta de las dos actas con el folio duplicado.
Código T-SQL para realizar el alta de las dos actas. /* Instrucciones SQL para dar de alta la primer acta con folio 1253 */ insert actas values (1253, 2, '10:30 - 12:00', 2, '22/08/2014', 3) insert calificaciones values (1253, 25473, 9) insert calificaciones values (1253, 25825, 10) insert calificaciones values (1253, 25969, 9) insert calificaciones values (1253, 25970, 9) /* Instrucciones SQL para dar de alta la segunda acta con folio 1253*/ insert actas values (1253, 4, '16:00 - 17:30', 4, '22/08/2014', 3) insert calificaciones values (1253, 25498, 9) insert calificaciones values (1253, 25644, 10) insert calificaciones values (1253, 25811, 10) insert calificaciones values (1253, 25895, 8)
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 3: Anota en tu libreta los errores que puede mostrar SQL Server al ejecutar las instrucciones anteriores. Escribe también las posibles consecuencias de la ejecución y si alguna o varias tablas tendrán inconsistencias o filas duplicadas.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Estado de las tablas después del alta de las dos actas con el folio duplicado.
Mensajes de SQL server al ejecutar las instrucciones. (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) Mens. 2627, Nivel 14, Estado 1, Línea 9 Infracción de la restricción PRIMARY KEY 'PK_actas'. No se puede insertar una clave duplicada en el objeto 'dbo.actas'. Se terminó la instrucción. (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas)
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Consulta T-SQL para mostrar el acta de calificaciones con folio 1253. SELECT FROM
WHERE
dbo.actas.folio, dbo.personal.personal, dbo.materias.materia, dbo.alumnos.credencial, dbo.alumnos.nombre, dbo.calificaciones.calificacion dbo.materias INNER JOIN dbo.actas INNER JOIN dbo.calificaciones ON dbo.actas.folio = dbo.calificaciones.folio ON dbo.materias.clave_materia = dbo.actas.clave_materia INNER JOIN dbo.alumnos ON dbo.calificaciones.credencial = dbo.alumnos.credencial INNER JOIN dbo.personal ON dbo.actas.clave_profesor = dbo.personal.clave_personal (dbo.actas.folio = 1253)
Ejecución de la consulta
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 4: Con ayuda de tu profesor anota en tu libreta el código necesario para hacer que la base de datos recupere el estado anterior a la ejecución de las instrucciones que produjeron el error, como si nunca se hubieran ejecutado.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Transacción explícita. Una transacción explícita se inicia con la instrucción T-SQL: BEGIN TRANSACTION (BEGIN TRAN) Esto le indica a SQL Server que todas las instrucciones que siguen forman parte de una transacción por lo que se deben ejecutar de forma atómica (todas de una sola vez).
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Transacción explícita – Guardar los cambios. Para finalizar una transacción explicita comenzada con BEGIN TRANSACTION (BEGIN TRAN) y hacer que todos los cambios realizados por las instrucciones de la transacción se hagan permanentes se ocupa la instrucción: COMITT TRANSACTION (COMMIT TRAN)
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Operación de transferencia de fondos de un banco. Tabla: cuentas numero_cuenta nombre 140000Oscar Lozano Pérez 140001Daniela Lozano Pérez
saldo 10000 1500
Tabla simplificada de las “cuentas” del “banco”.
Código reescrito usando una transacción para asegurar la ejecución de todos los pasos. declare @monto_transferencia as money set @monto_transferencia = 2000 begin tran update cuentas set saldo = saldo - @monto_transferencia where numero_cuenta = 140000 update cuentas set saldo = saldo + @monto_transferencia where numero_cuenta = 140001 commit tran
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
@@ERROR Devuelve el número de error de la última instrucción T-SQL ejecutada. Si la última instrucción se ejecutó correctamente, entonces, @@ERROR devuelve 0 (cero). Como @@ERROR se borra y restablece con cada instrucción ejecutada, debe verificarlo inmediatamente después de la instrucción que se está comprobando o guardarlo en una variable local para examinarlo posteriormente.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Transacción explícita – Anular los cambios. Para finalizar una transacción explicita comenzada con BEGIN TRANSACTION (BEGIN TRAN) y deshacer que todos los cambios realizados por las instrucciones, como si nunca se hubiera realizado alguno, se usa la instrucción: ROLLBACK TRANSACTION (ROLLBACK TRAN)
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Estado de las tablas antes del alta de las dos actas con el folio duplicado.
Código T-SQL usando transacciones declare @error as int begin transaction
begin transaction
insert actas values (1253, 2, '10:30 - 12:00', 2, '22/08/2014', 3) set @error = @@error
insert actas values (1253, 4, '16:00 - 17:30', 4, '22/08/2014', 3) set @error = @@error
insert calificaciones values (1253, 25473, 9) insert calificaciones values (1253, 25825, 10) insert calificaciones values (1253, 25969, 9) insert calificaciones values (1253, 25970, 9)
insert calificaciones values (1253, 25498, 9) insert calificaciones values (1253, 25644, 10) insert calificaciones values (1253, 25811, 10) insert calificaciones values (1253, 25895, 8)
if (@error = 0) commit tran else rollback tran
if (@error = 0) commit tran else rollback tran
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 5: Ahora con las transacciones, escribe en tu libreta los errores que puede mostrar SQL Server al ejecutar las instrucciones. Anota también las posibles consecuencias de la ejecución y si alguna o varias tablas tendrán inconsistencias o filas duplicadas.
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Estado de las tablas después del alta de las dos actas con el folio duplicado.
Mensajes de SQL server al ejecutar las instrucciones. (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) Mens. 2627, Nivel 14, Estado 1, Línea 9 Infracción de la restricción PRIMARY KEY 'PK_actas'. No se puede insertar una clave duplicada en el objeto 'dbo.actas'. Se terminó la instrucción. (1 filas afectadas) (1 filas afectadas) (1 filas afectadas) (1 filas afectadas)
Área de Investigación en Computación
INSTITUTO DE COMPUINGLÉS DE ORIENTE
Práctica 6: Analiza el código siguiente y di que es lo que realiza. Aunque no se muestra el procedimiento “inserta_personal”, escribe que piensas que hace y para que requeriría usar transacciones. declare @error as int begin transaction exec inserta_personal 5, 'Lic. Juan Carlos Fuentes Rojas', 'profesor' insert actas values (1254, 5, '07:30 - 09:00', 2, '22/08/2014', 3) set @error = @@error insert calificaciones values (1254, 25473, 8) insert calificaciones values (1254, 25825, 8) insert calificaciones values (1254, 25969, 10) insert calificaciones values (1254, 25970, 9) if (@error = 0) commit tran else rollback tran
Área de Investigación en Computación