El servidor MySQL soporta transacciones dependiendo de del motor de almacenamiento usado. Desde MySQL 5.5, el motor de almacenamiento predeterminado es InnoDB. InnoDB tiene soporte completo para transacciones ACID.
Las transacciones se pueden controlar usando SQL o llamadas a la API. Se recomienda usar llamadas a la API para habilitar y deshabilitar el modo de autoconsignación (auto commit) y para consignar y reiniciar transacciones.
Ejemplo #1 Establecer el modo de autoconsignación con SQL y a través de la API
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
if ($mysqli->connect_errno) {
echo "Falló la conexión a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* Recomendado: usar la API para cotrolar las configuraciones transaccionales */
$mysqli->autocommit(false);
/* No serán monitorizadas y reconocidas por la aplicación y el complemento de balance de carga */
if (!$mysqli->query('SET AUTOCOMMIT = 0')) {
echo "Falló la consulta: (" . $mysqli->errno . ") " . $mysqli->error;
}
?>
Los paquetes de características opcionales, como los comlementos de replicación y el de balance de carga, pueden fácilmente monitorizar llamadas a la API. El complemento de replicación transacciones conscientes del balance de carga, si las transacciones están controladas con llamadas a la API. Las transacciones conscientes del balance de carga no están disponibles si las sentencias SQL se usan para establecer el modo de autoconsignación, consignación y reinicio de una transacción.
Ejemplo #2 Consignación y reinicio
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
?>
Observe que el servidor MySQL no puede reiniciar todas las sentencias. Algunoas sentencias causan una consignación implícia.
Véase también