Transacciones MySql con PHP

Junio 27, 2009

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.

Entry Filed under: MySQL, PHP. .

5 Comments Add your own

  • 1. Anonimo  |  Julio 2, 2009 at 1:44 am

    Que sucede cuando se ejecuta rollback?

    Responder
    • 2. Avalón  |  Julio 2, 2009 at 4:02 pm

      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.

      Responder
  • 3. Jaime  |  Agosto 20, 2009 at 12:46 pm

    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.

    Responder
    • 4. Avalón  |  Agosto 26, 2009 at 11:59 pm

      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.

      Responder
  • 5. Antonio  |  Octubre 11, 2009 at 5:35 pm

    Hola…

    Responder

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Categorias

AJAX CMS CSS Diseño Firefox General Javascript MySQL Photoshop PHP Programación Recursos software

Archivo

Enlaces

Posts Más Vistos