Uso de Transacciones en MySQL desde PHP
En este tutorial aprenderás cómo utilizar transacciones en MySQL para garantizar la integridad de los datos cuando realices múltiples operaciones en la base de datos.
¿Qué es una transacción?
Una transacción en MySQL es un conjunto de operaciones que se ejecutan de manera atómica. Esto significa que todas las operaciones dentro de la transacción deben completarse con éxito; de lo contrario, se deshacen y la base de datos permanece intacta.
¿Cuándo usar transacciones?
Las transacciones son útiles cuando necesitas realizar varias operaciones que dependen entre sí, como en una transferencia de dinero entre cuentas, en la que debitar una cuenta y acreditar otra debe ocurrir sin errores. Si una de las operaciones falla, ninguna de las dos debe aplicarse.
Paso 1: Iniciar la transacción
Para iniciar una transacción en MySQL, utilizamos el comando BEGIN
. En PHP, puedes usar la función begin_transaction()
.
Paso 2: Realizar las operaciones dentro de la transacción
Durante la transacción, realizamos las operaciones que queremos asegurar. Si alguna de las operaciones falla, podemos hacer un ROLLBACK
para deshacer todos los cambios realizados hasta ese punto.
$servidor = "localhost";
$usuario = "root";
$contrasena = "";
$base_de_datos = "mi_base_de_datos";
$conexion = new mysqli($servidor, $usuario, $contrasena, $base_de_datos);
if ($conexion->connect_error) {
die("Conexión fallida: " . $conexion->connect_error);
}
$conexion->begin_transaction();
try {
$debitar = "UPDATE cuentas SET saldo = saldo - 500 WHERE id_cuenta = 1";
if ($conexion->query($debitar) !== TRUE) {
throw new Exception("Error al debitar dinero de la cuenta origen");
}
$acreditar = "UPDATE cuentas SET saldo = saldo + 500 WHERE id_cuenta = 2";
if ($conexion->query($acreditar) !== TRUE) {
throw new Exception("Error al acreditar dinero en la cuenta destino");
}
$conexion->commit();
echo "Transacción realizada con éxito.";
} catch (Exception $e) {
$conexion->rollback();
echo "Error en la transacción: " . $e->getMessage();
}
$conexion->close();
En este código, estamos realizando dos operaciones dentro de una transacción:
1. Debitar 500 unidades de la cuenta con id_cuenta = 1
.
2. Acreditar 500 unidades a la cuenta con id_cuenta = 2
.
Si alguna de estas operaciones falla, se deshacen todos los cambios con el comando rollback()
. Si ambas son exitosas, se confirma la transacción con commit()
.
Paso 3: Confirmar o deshacer la transacción
Al finalizar las operaciones, si no ocurre ningún error, usamos commit()
para confirmar la transacción. Si alguna operación falla, usamos rollback()
para revertir todos los cambios realizados en la transacción.
¿Qué sigue después?
Ahora que sabes cómo usar transacciones, puedes implementarlas en situaciones donde necesites asegurarte de que varias operaciones en la base de datos se realicen correctamente o ninguna de ellas se realice en caso de error. Algunas recomendaciones son:
- Usar transacciones cuando realices operaciones críticas que afecten a varias tablas.
- Comprobar siempre que cada operación dentro de una transacción se ejecute correctamente antes de hacer un
commit()
. - Usar transacciones con tablas que estén involucradas en procesos de negocio importantes, como transferencias de dinero, compras o ventas.
Conclusión
Las transacciones son fundamentales para mantener la integridad de los datos cuando se realizan operaciones múltiples en la base de datos. Con esta guía, ahora sabes cómo usarlas en MySQL desde PHP, garantizando que los datos se mantengan consistentes incluso en caso de errores.