Saltar la navegación

3.1.3.- Transacciones.

Imagen de un cilindro simulando una base de datos y una flecha azul.
Everaldo Coelho (GNU/GPL )


Como ya comentamos, si necesitas utilizar transacciones deberás asegurarte de que estén soportadas por el motor de almacenamiento que gestiona tus tablas en MySQL. Si utilizas InnoDB, por defecto cada consulta individual se incluye dentro de su propia transacción. Puedes gestionar este comportamiento con el método autocommit (función mysqli_autocommit).

$conProyecto->autocommit(false);   // deshabilitamos el modo transaccional automático

Al deshabilitar las transacciones automáticas, las siguientes operaciones sobre la base de datos iniciarán una transacción que deberás finalizar utilizando:

  • commit (o la función mysqli_commit). Realizar una operación "commit" de la transacción actual, devolviendo true si se ha realizado correctamente o false en caso contrario.
  • rollback (o la función mysqli_rollback). Realizar una operación "rollback" de la transacción actual, devolviendo true si se ha realizado correctamente o false en caso contrario.
...

$conProyecto->query('DELETE FROM stock WHERE unidades=0');  // Inicia una transacción

$conProyecto->query('UPDATE stock SET unidades=3 WHERE producto="STYLUSSX515W"');

. . . $conProyecto->commit(); // Confirma los cambios

Una vez finalizada esa transacción, comenzará otra de forma automática.

Ejercicio resuelto

Según la información que figura en la tabla stock de la base de datos proyecto, la tienda 1 (CENTRAL) tiene 2 unidades del producto de código 3DSNG y la tienda 3 (SUCURSAL2) ninguno. Suponiendo que los datos son esos (no hace falta que los compruebes en el código), utiliza una transacción para mover una unidad de ese producto de la tienda 1 a la tienda 3.

Autoevaluación

Pregunta

En el modo de gestión de transacciones que se utiliza por defecto, ¿es posible revertir los cambios que se aplican al ejecutar una consulta de acción?

Respuestas

No.

Sí.

Retroalimentación