El servidor MySQL soporta las transacciones dependiendo del motor de almacenamiento utilizado. Desde MySQL 5.5, el motor de almacenamiento por omisión es InnoDB. InnoDB tiene un soporte completo de las transacciones ACID.
Las transacciones pueden ser controladas utilizando SQL, o mediante llamadas API.
Se recomienda utilizar las llamadas API para activar o desactivar
el modo autocommit
y para validar y anular las transacciones.
Ejemplo #1 Definir el modo autocommit
a través de SQL o a través de la API
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
// Recomendado: uso de la API para controlar la configuración de las transacciones
$mysqli->autocommit(false);
// No será monitoreado y reconocido por el plugin de replicación y balanceo de carga
$mysqli->query('SET AUTOCOMMIT = 0');
Los paquetes de funcionalidades adicionales, como los plugins de replicación
y balanceo de carga pueden monitorear las llamadas API. El plugin de replicación
ofrece seguridad sobre las transacciones durante el balanceo de carga, si
las transacciones son controladas con llamadas API. La seguridad de
las transacciones durante el balanceo de carga no está disponible si las consultas
SQL son utilizadas para definir el modo autocommit
, para validar o anular
una transacción.
Ejemplo #2 Validación y anulación de una transacción
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
Tenga en cuenta que el servidor MySQL no puede anular todas las consultas. Algunas consultas requieren una validación implícita.
Ver también