sábado, 13 de diciembre de 2014

Transacciones en PDO



Hola Amigos, el tema principal que tocaremos en este Blog es el de Transacciones en PDO:

Las transacciones son implementadas típicamente para hacer que el lote de cambios se apliquen a la vez; esto tiene el buen efecto secundario de mejorar drásticamente la eficiencia de las actualizaciones. En otras palabras, las transacciones pueden hacer los scripts más rápidos y potencialmente más robustos (aún así es necesario usarlas correctamente para obtener ese beneficio).

Desafortunadamente, no todas las bases de datos admiten transacciones, por lo que PDO necesita ser ejecutado en lo que es conocido como el modo "auto-commit" cuando se abra por primera vez la conexión. El modo auto-commit significa que toda consulta que se ejecute tiene su propia transacción implícita, si la base de datos lo admite, o ninguna transacción si la base de datos no las admite. Si fuera necesario el uso de transacciones, se debe usar el método PDO::beginTransaction() para iniciar una. Si el controlador subyacente no admite transacciones, se lanzará una PDOException (independientemente de la configuración del manejo de errores: esto es siempre una condición de error serio). Una vez que se esté en una transacción, se puede usar  PDO::commit() o  PDO::rollBack() para finalizarla, dependiendo del éxito del código que se ejecute durante la transacción.

Una transacción tiene 4 propiedades fundamentales que son:

Atomicidad: Significa que una transacción es una unidad indivisible

Consistencia: Esta propiedad indica que después de ejecutarse una transacción, la base de datos debe quedar en un estado correcto. Si sucede un error antes de terminar la transacción, se debe regresar el sistema al mismo estado que se encontraba antes de comenzar dicha transacción.

Aislamiento: Esta propiedad indica que el comportamiento de una transacción no se ve afectada por el hecho de que otras transacciones sean ejecutadas al mismo tiempo.

Durabilidad: Los efectos de una transacción son permanentes tras su grabación.



Modalidades de confirmación en PHP (PDO)

Puede controlar cómo se confirman los grupos de sentencias de SQL especificando una modalidad de confirmación para un recurso de conexión. La extensión PDO admite dos modalidades de confirmación: la confirmación automática y la confirmación manual.

*Modalidad de confirmación automática
En modalidad de confirmación automática, cada sentencia de SQL es una transacción completa, que se confirma automáticamente. La modalidad Autocommit le ayuda a evitar problemas de escalas de bloqueo que puedan obstaculizar el rendimiento de aplicaciones Web muy escalables. Por omisión, la extensión PDO abre cada conexión en modalidad de confirmación automática.

*Modalidad de confirmación manual
En modalidad de confirmación manual, la transacción comienza al llamar al método PDO::beginTransaction, y finaliza al llamar al método PDO::commit o PDO::rollBack. Esto significa que las sentencias ejecutadas (en la misma conexión) entre el inicio de una transacción y la llamada al método de confirmación o retrotracción se tratan como una única transacción.

La modalidad de confirmación manual es útil si se necesita retrotraer una transacción que contiene una o varias sentencias de SQL. Si emite sentencias SQL en una transacción y el script finaliza sin confirmar o retrotraer explícitamente la transacción, PDO automáticamente retrotrae cualquier trabajo realizado en la transacción.

Después de confirmar o retrotraer la transacción, PDO restablece automáticamente la conexión de base de datos a la modalidad Autocommit.

No hay comentarios:

Publicar un comentario