Estados de una transacción en base de datos

Clasificado en Informática

Escrito el en español con un tamaño de 4,73 KB

Generalmente, cuando se conecta con un cliente a un SGBD, por defecto está activado el modo AUTOCOMMIT-ON, es decir, cada comando SQL que se ejecute, será considerado como una transacción independiente. Para activar las transacciones de múltiples sentencias hay que establecer el modo AUTOCOMMIT=OFF. A partir de ese momento, todos los comandos SQL enviados al SGBD tendrán que terminarse
con una orden COMMIT o una orden ROLLBACK. De este modo, se asegura la integridad de los datos a un nivel más alto. Muchos SGBD requieren de una orden START TRANSACTION o START WORK para comenzar una transacción y otros lo hacen de forma implícita al establecer el modo autocommit=off.
3 formas paxa comenzar una transacción:
SET AUT0C0MMIT=0; #ó
START TRANSACTION; #ó
BEGIN WORK;
Para terminar una transacción:
COMMIT WORK; #Acepta los cambios.
ROLLBACK WORK; #Cancela los cambios
SET AUTOCOMMIT 0;
#se actualiza el stock
UPDATE Productos SET Stock=Stock-2 WHERE CodigoProducto='AAAF102'
#se inserta la cabecera del pedido
INSERT INTO Pedidos Valúes
(25,now(),'Francisco García','Pendiente de Entrega');
#se inserta el detalle del pedido
INSERT INTO DetallePedidos
(CodigoPedido,CodigoProducto,Unidades) Valúes (25,'AAAF102',2);
#aceptar transacción
COMMIT WORK;
Concurrencia:
Cuando se utilizan transacciones, pueden suceder problemas de concurrencia en el acceso a los datos, es decir, problemas ocasionados por el acceso al mismo dato de dos transacciones distintas.
Dirty Read (Lectura Sucia). Una transacción lee datos escritos por una transacción que no ha hecho COMMIT.
Nonrepeateable Read (Lectura No Repetible), Una transacción vuelvea leer
datos que leyó previamente y encuentra que han sido modificados por otra transacción.
Phantom Read (Lectura Fantasma). Una transacción lee unos datos que no
existían cuando se inició la transacción.

Cuando se trabaja con transacciones, el SGBD puede bloquear conjuntos de datos para evitar o permitir que sucedan estos problemas. Según el nivel de concurrencia que se desee, es posible solicitar al SGBD cuatro niveles de aislamiento. Un nivel de aislamiento define cómo los cambios hechos por una transacción son visibles a otras transacciones:
Read Uncommited (Lectura no acometida). Permite que sucedan los tres problemas. Las sentencias SELECT son efectuadas sin realizar bloqueos, por
tanto, todos los cambios hechos por una transacción pueden verlos las otras transacciones.
Read Commited (Lectura acometida). Los datos leídos por una transacción
pueden ser modificados por otras transacciones. Se pueden dar los problemas de Phantom Read y Non Repeteable Read.
Repeateable Read (Lectura Repetible). Tan solo se permite el problema del
Phantom Read. Consiste en que ningún registro leído con un SELECT se puede cambiar en otra transacción.
Serializable. Las transacciones ocurren de forma totalmente aislada a otras transacciones. Se bloquean las transacciones de tal manera que ocurren unas detrás de otras, sin capacidad de concurrencia.

Las transacciones son conjuntos de operaciones SQL que se ejecutan de forma atómica. Una vez iniciadas, se pueden acometer (COMMIT) o cancelar ROLLBACK.

Entradas relacionadas: