Saltar al contenido principal
Documentos
FuncionesExpresionesKeywordsDeclaracionesCláusulas

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.

Perfeccionamiento de SQL para principiantes

Adquiere los conocimientos de SQL para interactuar con tus datos y consultarlos.
Empieza a aprender gratis