Saltar al contenido principal
Documentos
FuncionesExpresionesKeywordsDeclaracionesCláusulas

Sentencia MySQL START TRANSACTION

La sentencia `INICIAR TRANSACCIÓN` en MySQL se utiliza para iniciar una nueva transacción, lo que permite ejecutar varias operaciones SQL como una única unidad de trabajo. Garantiza que todas las operaciones de la transacción se completen correctamente antes de consignar los cambios en la base de datos, manteniendo la integridad y coherencia de los datos.

Utilización

La opción "INICIAR TRANSACCIÓN" se utiliza cuando necesitas asegurarte de que un conjunto de operaciones es atómico, es decir, que o todas las operaciones tienen éxito o ninguna lo tiene. Esto es crucial para mantener la integridad de los datos en escenarios que impliquen cambios múltiples y dependientes en la base de datos.

START TRANSACTION;

En esta sintaxis, `START TRANSACTION` inicia una nueva transacción, aislando las operaciones posteriores hasta que se emita un `COMMIT` o un `ROLLBACK`. Ten en cuenta que `INICIAR` o `INICIAR TRABAJO` también pueden utilizarse como sinónimos para iniciar una transacción, y que puedes especificar características de la transacción, como los niveles de aislamiento, si es necesario.

Ejemplos

1. Transacción básica

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

Este ejemplo básico transfiere fondos entre dos cuentas. La transacción garantiza que ambas actualizaciones se apliquen juntas.

2. Transacción con Rollback

START TRANSACTION;
INSERT INTO orders (order_id, product_id, quantity) VALUES (1, 101, 2);
DELETE FROM inventory WHERE product_id = 101 AND quantity < 0;
ROLLBACK;

Aquí se utiliza una reversión para deshacer los cambios si falla la operación de borrado, manteniendo la coherencia de la base de datos.

3. Transacción con condición

START TRANSACTION;
UPDATE products SET stock = stock - 5 WHERE product_id = 200 AND stock >= 5;
IF ROW_COUNT() = 0 THEN
    ROLLBACK;
ELSE
    INSERT INTO order_details (order_id, product_id, quantity) VALUES (10, 200, 5);
    COMMIT;
END IF;

Este ejemplo incorpora una condición para comprobar los niveles de existencias antes de comprometer la transacción, para garantizar que se siguen las normas de inventario. Asegúrate de la compatibilidad con la versión de MySQL en uso, ya que la sintaxis puede variar.

Consejos y buenas prácticas

  • Utiliza transacciones para operaciones críticas. Aplica transacciones para operaciones que deban ser atómicas, consistentes, aisladas y duraderas (ACID).
  • Finaliza siempre las transacciones. Concluye cada transacción con `COMMIT` o `ROLLBACK` para liberar bloqueos y evitar posibles problemas.
  • Cuidado con las transacciones largas. Mantén las transacciones lo más cortas posible para reducir la contención de bloqueos y mejorar el rendimiento.
  • Comprueba si hay errores. Implementa el tratamiento de errores en las transacciones para decidir si se confirma o se revierte en función del éxito o del fracaso.
  • Evita la interacción con el usuario. No incluyas avisos al usuario dentro de una transacción para evitar una larga duración de la misma.
  • Comprende el comportamiento de autocompromiso. Por defecto, MySQL funciona con el modo autocommit activado. Cuando utilices transacciones, desactiva el autocommit para gestionarlas manualmente.
  • Transacciones anidadas. MySQL no admite transacciones anidadas reales. Ten en cuenta esta limitación cuando diseñes flujos de trabajo transaccionales complejos.

Perfeccionamiento de SQL para principiantes

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