Contenido de esta guía
Qué significa
COMMIT termina correctamente la transacción actual y confirma sus cambios. Después de esa confirmación, un ROLLBACK normal ya no puede deshacer las operaciones de esa transacción.
- Abre una transacción explícita.
- Ejecuta cambios con condiciones precisas.
- Revisa el resultado antes de confirmar.
COMMIT es una decisión, no una validación
Una transacción agrupa operaciones, pero no decide si la lógica es correcta. COMMIT conserva exactamente lo que se haya ejecutado, incluso una actualización demasiado amplia. La seguridad procede de limitar el alcance, comprobar las filas afectadas y confirmar solo cuando el resultado coincide con la intención.
Secuencia segura para practicar: BEGIN → cambio → consulta de comprobación → COMMIT o ROLLBACK.
Sintaxis básica
BEGIN;
-- una o varias operaciones relacionadas
COMMIT;Ejemplo guiado con el pedido 102
| id | estado | total |
|---|---|---|
| 102 | pendiente | 49.50 |
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 102;
SELECT id, estado, total
FROM pedidos
WHERE id = 102;
COMMIT;| id | estado | total |
|---|---|---|
| 102 | enviado | 49.50 |
Cómo funciona
BEGINabre la unidad de trabajo.- El
WHERElimita el cambio al pedido 102. - El
SELECTmuestra el estado provisional antes de decidir. COMMITconfirma la transacción; el total no cambia.
Error frecuente
Confirmar una actualización sin comprobar su alcance
BEGIN;
UPDATE pedidos SET estado = 'enviado';
COMMIT;La transacción no añade el WHERE que falta. Esta secuencia cambia todos los pedidos y después confirma el resultado. Antes de ejecutar COMMIT, revisa la condición, el número de filas afectadas y una muestra de los valores.
Comprueba lo aprendido
Confirma un cambio controlado
Cambia el pedido 105 de “pendiente” a “enviado”, consulta la fila y confirma la transacción.
BEGIN.UPDATE necesita WHERE id = 105.SELECT y coloca COMMIT al final.Solución razonada
BEGIN;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 105;
SELECT id, estado, total
FROM pedidos
WHERE id = 105;
COMMIT;| id | estado | total |
|---|---|---|
| 105 | enviado | 69.90 |
El pedido 105 queda con estado “enviado” y mantiene el total de 69.90. En una práctica no destructiva, ejecuta la misma secuencia sobre una copia de la base o termina con ROLLBACK mientras ensayas.
Autocommit y diferencias entre motores
Los motores y clientes suelen usar autocommit fuera de una transacción explícita, pero los detalles cambian. PostgreSQL y SQLite admiten COMMIT; SQLite también acepta END TRANSACTION y no permite anidar bloques BEGIN...COMMIT de forma directa. MySQL documenta sentencias DDL que provocan confirmaciones implícitas. No presupongas que una operación de esquema puede deshacerse igual en todos los motores y no confundas transacciones anidadas con SAVEPOINT.
Qué debes recordar
COMMITconfirma la transacción actual.- No corrige una sentencia peligrosa ni valida reglas de negocio.
- Después de confirmar, un
ROLLBACKnormal no recupera esos cambios. - Revisa autocommit, DDL y anidamiento en el motor que utilizas.
Conceptos relacionados
Fuentes técnicas consultadas
El cierre de transacciones, el modo autocommit y las confirmaciones implícitas se verificaron en la documentación oficial de cada motor.