Sentencia COMMIT de MySQL
La sentencia `COMMIT` en MySQL se utiliza para guardar permanentemente todos los cambios realizados durante la transacción actual. Finaliza la transacción, haciendo que todas las modificaciones estén disponibles para otros usuarios y sesiones.
Utilización
La sentencia `COMMIT` se suele utilizar después de una serie de operaciones `INSERT`, `UPDATE` o `DELETE` para garantizar que los cambios se guardan en la base de datos. Es esencial en la gestión de transacciones para garantizar la integridad de los datos.
COMMIT;
Esta sintaxis confirma que todos los cambios de la transacción actual se guardan y no se pueden deshacer. Ten en cuenta que `COMMIT` sólo es aplicable en motores de almacenamiento que admitan transacciones, como InnoDB. No es aplicable en motores de almacenamiento no transaccionales como MyISAM.
Ejemplos
1. Transacción básica
START TRANSACTION;
INSERT INTO accounts (name, balance) VALUES ('John Doe', 1000);
COMMIT;
En este ejemplo, se añade una nueva cuenta, y el cambio se guarda utilizando `COMMIT` para finalizar la transacción.
2. Comprometiendo múltiples cambios
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'John Doe';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Jane Smith';
COMMIT;
Este ejemplo transfiere fondos entre dos cuentas. Ambas actualizaciones se finalizan juntas con un único `COMMIT`, garantizando la atomicidad.
3. Confirmación condicional con tratamiento de errores
Para gestionar las confirmaciones condicionales y la detección de errores, utiliza lógica de aplicación o procedimientos almacenados. No se admiten las sentencias `IF` directas en los guiones SQL. Aquí tienes un ejemplo utilizando un procedimiento almacenado:
DELIMITER //
CREATE PROCEDURE ConditionalCommit()
BEGIN
DECLARE order_exists INT;
START TRANSACTION;
DELETE FROM orders WHERE order_id = 101;
SELECT COUNT(*) INTO order_exists FROM orders WHERE order_id = 101;
IF order_exists = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END //
DELIMITER ;
En este ejemplo, un procedimiento comprueba si la eliminación de la orden se ha realizado correctamente antes de confirmarla.
Consejos y buenas prácticas
- Emparejar con `INICIAR TRANSACCIÓN`. Utiliza `COMIT` con `START TRANSACTION` para asegurarte de que los cambios forman parte de una transacción.
- Maneja los errores con `ROLLBACK`. Revierte los cambios antes de confirmarlos en caso de errores.
- Garantiza la coherencia de la transacción y completa todas las operaciones necesarias dentro de una transacción antes de comprometerla.
- Minimiza la duración de la transacción para reducir el bloqueo y mejorar el rendimiento.
- Prueba antes de comprometerte para verificar que todos los cambios cumplen tus requisitos.
Nota adicional
Emitir un `COMIT` sin un `INICIAR TRANSACCIÓN` precedente no tiene ningún efecto, ya que no hay cambios que finalizar. Asegúrate siempre de que se utiliza `INICIAR TRANSACCIÓN` para iniciar una transacción.