Lenguaje de control de transacciones en mysql
El TCL, Transaction Control Language, o Lenguaje de Control de Transacciones en MySQL es un conjunto de comandos utilizados para gestionar transacciones en una base de datos. Una transacción es una secuencia de operaciones que se ejecutan como una unidad lógica, garantizando la integridad y consistencia de los datos. Los comandos TCL permiten controlar cómo y cuándo se aplican o deshacen los cambios en la base de datos.Principales comandos TCL
- COMMIT, confirma una transacción, haciendo permanentes todos los cambios realizados en la base de datos durante esa transacción.
//El INSERT se confirma y los datos se guardan permanentemente.
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com');
COMMIT;
- ROLLBACK, deshace todos los cambios realizados en la transacción actual, restaurando la base de datos al estado previo al inicio de la transacción.
//El INSERT no se aplica porque se ejecuta ROLLBACK.
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com');
ROLLBACK;
- SAVEPOINT, establece un punto intermedio dentro de una transacción al que se puede volver usando ROLLBACK TO. Permite deshacer parcialmente una transacción.
//En este ejemplo, solo se confirma el primer INSERT (Carlos), ya que el ROLLBACK TO punto1 deshace el segundo INSERT (María).
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Carlos', 'carlos@example.com');
SAVEPOINT punto1;
INSERT INTO usuarios (nombre, email) VALUES ('María', 'maria@example.com');
ROLLBACK TO punto1;
COMMIT;
- START TRANSACTION, o BEGIN, inicia una nueva transacción. A partir de este punto, los cambios no se hacen permanentes hasta que se ejecute COMMIT.
.
//Se asegura que ambas actualizaciones (transferencia de saldo) se realicen juntas o no se realicen.
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
- SET TRANSACTION, define características de la transacción, como el nivel de aislamiento (por ejemplo, READ COMMITTED, SERIALIZABLE)..
//Esto configura la transacción como de solo lectura, útil para consultas sin modificaciones.
SET TRANSACTION READ ONLY;
START TRANSACTION;
SELECT * FROM usuarios;
COMMIT;
Características Lenguaje de Control de Transacciones
- Atomicidad: Garantiza que todas las operaciones de una transacción se completen con éxito o no se aplique ninguna.
- Consistencia: Asegura que la base de datos pase de un estado válido a otro.
- Aislamiento: Las transacciones se ejecutan de forma aislada para evitar interferencias.
- Durabilidad: Los cambios confirmados con COMMIT se guardan permanentemente, incluso en caso de fallos del sistema.
Los comandos del Lenguaje de Control de Transacciones son fundamentales en entornos donde la integridad de los datos es crítica, como en sistemas bancarios o de comercio electrónico. No todos los motores de almacenamiento de MySQL (como MyISAM) soportan transacciones; InnoDB es el más común para usar TCL. Puedes usar "SET autocommit = 0;" para desactivar el autocommit y controlar manualmente las transacciones.
Para avanzar más en el tema están los siguientes posts para saber más sobre transacciones en mysql:
//El INSERT se confirma y los datos se guardan permanentemente.
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com');
COMMIT;
//El INSERT no se aplica porque se ejecuta ROLLBACK.
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com');
ROLLBACK;
//En este ejemplo, solo se confirma el primer INSERT (Carlos), ya que el ROLLBACK TO punto1 deshace el segundo INSERT (María).
START TRANSACTION;
INSERT INTO usuarios (nombre, email) VALUES ('Carlos', 'carlos@example.com');
SAVEPOINT punto1;
INSERT INTO usuarios (nombre, email) VALUES ('María', 'maria@example.com');
ROLLBACK TO punto1;
COMMIT;
//Se asegura que ambas actualizaciones (transferencia de saldo) se realicen juntas o no se realicen.
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
//Esto configura la transacción como de solo lectura, útil para consultas sin modificaciones.
SET TRANSACTION READ ONLY;
START TRANSACTION;
SELECT * FROM usuarios;
COMMIT;
- Atomicidad: Garantiza que todas las operaciones de una transacción se completen con éxito o no se aplique ninguna.
- Consistencia: Asegura que la base de datos pase de un estado válido a otro.
- Aislamiento: Las transacciones se ejecutan de forma aislada para evitar interferencias.
- Durabilidad: Los cambios confirmados con COMMIT se guardan permanentemente, incluso en caso de fallos del sistema.
Para avanzar más en el tema están los siguientes posts para saber más sobre transacciones en mysql: