Lo primero de todo, ¿qué es una transacción MySQL? Una transacción en MySQL es la combinación de una o más consultas SQL que juntas forman una unidad de trabajo. El ejemplo clásico es el movimiento de dinero en un banco entre dos cuentas bancarias. Si la persona A quiere hacer una transferencia bancaria a la persona B, habrá dos consultas: 1) la que descuenta el dinero a la persona A y 2) la que aumenta el saldo de la persona B. Si falla la consulta 2, tenemos un problema: Le habremos descontado el dinero a la persona A pero la persona B nunca recibirá su dinero.
En casos como estos es necesario tomar estas dos consultas como un todo y si falla una de las dos operaciones, volver atrás y deshacer la operación. Para ello se utilizan las transacciones.
En este ejemplo vamos a ver como realizar transacciones con el ORM Doctrine y Symfony (no necesariamente debemos utilizar Symfony).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $conn = Doctrine_Manager::getInstance()->getCurrentConnection(); $conn->beginTransaction(); try{ /** Hacemos las operaciones necesarias * para realizar la transferencia bancaria */ $userA = UserTable::getById($userA_id); $userB = UserTable::getById($userB_id); $userA->money -= 20; $userA->save(); $userB->money += 20; $userB->save(); $conn->commit(); } catch (Exception $e){ $conn->rollBack(); throw $e; } |
Si las dos operaciones se realizan con éxito, quedará reflejado en la base de datos. Si por el contrario cualquiera de las dos consultas fallará, se desharán los cambios (rollBack) y no se guardarán en la base de datos (mostramos el error y deberemos tratarlo según nuestros intereses).
Etiquetas: doctrine, mysql, Symfony, transacción, transacciones
Voy a empezar con un post un poco técnico pero de gran utilidad para la monitorización del servidor de bases de datos mysql.
mytop es una utilidad que sirve para monitorizar las consultas mysql, procesos, y rendimiento general del servidor de bases de datos mysql. Entre otras cosas, nos permite visualizar las consultas lentas (slow queries) que se ejecutan en la base de datos.
Vamos a realizar al instalación en un servidor CentOS. Para hacerlo, necesitamos tener instalados en nuestro servidor Perl , DBI y Term::ReadKey. Los dos primeros suelen estar instalados por lo que pasamos a instalar Term::ReadKey.
wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz tar -zxvf TermReadKey-2.30.tar.gz cd TermReadKey-2.30 perl Makefile.PL make make test make install
Ahora pasamos a intalar mytop
wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.4.tar.gz tar -zxvf mytop-1.4.tar.gz cd mytop-1.4 perl Makefile.PL make make test make install
Etiquetas: monitorización, mysql, mytop