Gestión de transacciones
Cuando tenemos un conjunto de consultas de inserción o borrado, si no podemos realizar alguna de ellas, que las anteriores que sí se hayan podido realizar no tengan efecto o no se registren en la base de datos. En otras palabras, un conjunto de sentencias se comportan como una sola unidad, o se ejecutan todas o ninguna. Esto es más o menos la definición de transacción.
Este comportamiento sobre acciones en la base de datos lo podemos conseguir mediante el uso de transacciones, las cuales tendrán tresoperaciones básicas en cualquier SGBD:
Comienzo de la transacción (Begin Trannsaction)
Fin de la transacción correcto (Commit Trannsaction) Todas las operaciones quedan en firme.
- Fin de la transacción incorrecto (Rollback Trannsaction) Se deshacen todas las modificaciones que se hayan realizado.
La librería **mysqli** nos permite realizar una gestión manual de transacciones.
No podremos hacer transacciones en MySQL, si usamos como motor de almacenamiento MyISAM o ISAM. Se recomienda usar como motor InnoDB si queremos utilizarlas.
Mysqli nos proporciona las siguientes funciones:
**Estilo por procedimientos:**
bool mysqli_autocommit ( mysqli $identificador_de_enlace, bool $modo )
**Estilo orientado a objetos (método):**
class mysqli {
bool autocommit ( bool $modo )
}
Tanto la función como el método propio de la clase MySQLI habilitan o deshabilitan la gestión de transacciones de forma manual. Tendremos dos opciones:
Si modo es TRUE, el commit se realizará de forma automática.
Si modo es FALSE, la finalización de la transacción se realizará cuando hagamos commit de forma explícita.
Para finalizar la transacción actual, forzando su escritura en la base de datos utilizaremos:
** Estilo por procedimientos: **
bool mysqli_commit ( mysqli $identificador_de_enlace )
**Estilo orientado a objetos (método):**
class mysqli {
bool commit ( void )
}
Para finalizar la transacción actual, deshaciendo todos los cambios desde que comenzó o desde el último commit usaremos:
** Estilo por procedimientos:**
bool mysqli_rollback ( mysqli $identificador_de_enlace )
** Estilo orientado a objetos (método): **
class mysqli {
bool rollback ( void )
}