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 )
}

results matching ""

    No results matching ""