Transacciones

Page 1

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


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.