Una transacción es una unidad de la ejecución de un
programa que accede y posiblemente actualiza varios
elementos de datos. Una transacción se inicia por la ejecución
de un programa de usuario escrito en un lenguaje
de manipulación de datos de alto nivel o en un lenguaje
de programación (por ejemplo SQL, COBOL, C, C++
o Java). Silberschatz, A., Korth, H. F. y Susarshan, S. (2006). Fundamentos de bases de datos -5ª ed.- McGraw-Hill.
Una acción o serie de acciones llevada a cabo por un unico usuario o por un programa de aplicación y que lee y actualiza el contenido de la base de datos. Connolly, T. y Begg, C. E. (2005). Sistemas de bases de datos . Pearson Addison Wesley.
Slide 4
Caracteristicas de una Transacción
Para asegurar la integridad de los datos se necesita
que el sistema de base de datos mantenga las siguientes
propiedades de las transacciones:
• Atomicidad. O todas las operaciones de la transacción
se realizan adecuadamente en la base de
datos o ninguna de ellas.
• Consistencia. La ejecución aislada de la transacción
(es decir, sin otra transacción que se ejecute
concurrentemente) conserva la consistencia de la
base de datos.
• Aislamiento. Aunque se ejecuten varias transacciones
concurrentemente, el sistema garantiza que
para cada par de transacciones Ti y Tj
, se cumple
que para los efectos de Ti
, o bien Tj ha terminado
su ejecución antes de que comience Ti , o bien que
Tj ha comenzado su ejecución después de que Ti
termine. De este modo, cada transacción ignora al
resto de las transacciones que se ejecuten concurrentemente
en el sistema.
• Durabilidad. Tras la finalización con éxito de una
transacción, los cambios realizados en la base de
datos permanecen, incluso si hay fallos en el sistema
Slide 5
COMMIT
Confirma la transacción actual. Todos los cambios realizados por la transacción se hacen visibles a los demás y están garantizados para ser duradero si se produce un accidente.SintaxisCOMMIT [WORK | TRANSACTION ]Ejemplo:BEGIN; UPDATE cuentas SET balance = balance - 100.00 WHERE nombre = 'Alicia';
-- etc etc
COMMIT;
Deshace la transacción actual y provoca que todas las modificaciones originadas por la misma sean descartadas, es decir, restaura el estado anterior a la modificación.SintaxisROLLBACK [WORK | TRANSACTION ]Ejemplo:BEGIN;
UPDATE
cuentas SET balance = balance – 100 WHERE nombre = ‘Alice’;
SAVEPOINT
marcador1;
UPDATE
cuentas SET balance = balance + 100 WHERE nombre = ‘Bob’;
ROLLBACK
TO marcador1;
UPDATE
cuentas SET balance = balance + 100 WHERE nombre = ‘Wally’;
COMMIT;
Se utiliza para definir puntos de control en una transacción. Algunas transacciones, por su complejidad, pueden tener una gran cantidad de instrucciones que en caso de que falle una, habría que volver a comenzar con la transacción. El uso de SAVEPOINT ayuda a dividir el bloque de instrucciones de la transacción en bloque más pequeños que queremos mantener en caso de que algo salga mal más adelante.SintaxisSAVEPOINT savepoint_nombreEjemplo:BEGIN; INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;
El comando SET TRANSACTION establece las características de la operación actual. No tiene ningún efecto en las operaciones subsiguientes.CARACTERÍSTICAS SET SESSION determina las características de la operación por defecto para las posteriores operaciones de una sesión. Estos valores pueden ser anulados por SET TRANSACTION para una transacción determinada.Las características de las operaciones disponibles son el nivel de aislamiento, el modo de transacción de acceso (lectura / escritura o sólo lectura), y el modo diferible.El nivel de aislamiento de una transacción determina qué datos de la transacción puede ver cuando otras transacciones se están ejecutando al mismo tiempo.
SintaxisSET TRANSACTION transaction_mode [, ...] SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]
where transaction_mode is one of:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
Ejemplo:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT COUNT(*) AS TotalProblems,
SUM(CASE WHEN Problem LIKE '%Kenny%' THEN 1 END) AS [Kenny's Problems],
SUM(CASE WHEN Problem LIKE '%printer%'THEN 1 END) AS [Printer Problems] FROM Tickets WHERE ID BETWEEN 0 AND 100000;