Transacciones MySql con PHP


Esta vez mostrare como ejecutar transacciones utilizando el motor InnoDB de MySql con PHP.

Comenzemos!!!

En InnoDB toda la actividad del usuario se produce dentro de una transaccion, es decir cada sentencia SQL es una representa una transaccion a la base de datos.

MySql inicia una conexion a la base de datos con AUTOCOMMIT habilitado, lo que esto significa es que se ejecuta la sentencia SQL e implicitamente se ejecuta un COMMIT haciendo permanente los cambios en la base.

Si deshabilitamos AUTOCOMMIT significaria que tendriamos abierta la transaccion y esta finalizará cuando se ejecute una sentencia COMMIT ó ROLLBACK, despues de esto iniciaria una nueva transaccion.

Ahora un ejemplo:

<?php
//Establecemos los datos para la conexion a la base
$servidor = “localhost”;
$usuario = “root”;
$password = “”;
$BaseDatos =”base”;

//Nos conectamos a la base
$conexion = new mysqli($servidor, $usuario, $password, $BaseDatos);

//Ejecutamos un select y contamos las filas que tiene la tabla
$result = $conexion->query(“select * from clientes”);
echo “Num de filas al iniciar: “.$result->num_rows. “</br>”;

// deshabilitamos el autocommit para llevar a cabo la transacción
//con varias sentencias
$conexion->autocommit(false);

// Insertamos dos registros en la base de datos
$conexion->query(“INSERT INTO clientes (id,nombre) VALUES(1,’Juan’);”);
$conexion->query(“INSERT INTO clientes (id,nombre) VALUES(2,’Jose’);”);

// Ejecutamos el commit, esto hace que los cambios sean permanentes y se
// vuelven visibles para los otros usuarios.
$conexion->commit();

// Ejecutamos un select y contamos las filas que tiene la tabla
$result = $conexion->query(“select * from clientes”);
echo “Num de filas despues de ejecutar el commit: “.$result->num_rows.”</br>”;

// Insertamos dos registros en la base de datos
$conexion->query(“INSERT INTO clientes (id,nombre) VALUES(3,’Ana’);”);
$conexion->query(“INSERT INTO clientes (id,nombre) VALUES(4,’Sofia’);”);

// Ejecutamos un select y contamos las filas que tiene la tabla
$result = $conexion->query(“select * from clientes”);
echo “Numero de filas despues de insertar dos registros mas:”. $result->num_rows.”</br>”;

// Ejecutamos el rollback para deshacer los cambios.
$conexion->rollback();

// Ejecutamos un select y contamos las filas que tiene la tabla
$result = $conexion->query(“select * from clientes”);
?>

Eso es todo por hoy, espero que la informacion  les sea de utilidad.

8 comentarios en “Transacciones MySql con PHP

  1. Que sucede cuando se ejecuta rollback?

    • Cuando se ejecuta rollback, los cambios que se realizaron en la base de datos pierden efecto, es decir que la base de datos quedará tal como estaba al inicio de la transaccion.

  2. Hay manera de consultar cambios que se efectuen a una tabla antes que haga el commint, desde otra sessión de mysql?

    Es decir: en una estación de trabajo estoy efectuando un INSERT a la tabla y desde otra estación de trabajo otro cliente está ejecutando un SELECT COUNT(*) de la misma tabla, necesito que éste último cliente pueda ver la cantidad de registros que hay contando el que está en memoria antes de hacer el COMMIT, se podrá hacer esto de alguna manera?
    De antemano, gracias por la colaboración que me puedan brindar.

    • Los cambios que se hacen antes de ejecutar el commit solo son visibles desde la conexion donde se ejecuto, no se puede acceder a estos registros desde otra conexion hasta que se haya ejecutado la funcion commit.

  3. Muy bien explicado, GRACIAS (parecido a VB).

  4. $conexion->autocommit(false);

    // Insertamos dos registros en la base de datos
    $conexion->query(“call sp_setclientes (1,’Juan’);”);
    $conexion->query(“call sp_setclientes (2,’Jose’);”);

    // Ejecutamos el commit, esto hace que los cambios sean permanentes y se
    // vuelven visibles para los otros usuarios.
    $conexion->commit();

    funciona con procedimientos almacenados????

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s