12.185 cursos gratis
8.725.372 alumnos
Facebook Twitter YouTube
Busca cursos gratis:

Curso de MySQL con PHP

Autor: Ariel Alejandro Wagner
Curso:
9/10 (2 opiniones) |1754 alumnos|Fecha publicación: 10/01/2011
Envía un mensaje al autor

Capítulo 19:

 Transacciones. Fundamentos


Una transacción se trata de un proceso de acciones duales que permite crear un proceso que sucede en dos sentidos y, que a su vez, ambos sentidos deben ejecutarse de forma correcta para que la operación resulte exitosa. Por ejemplo, un caso de transacción muy común se produce durante un proceso de una venta comercial. Veamos la siguiente figura 1 para analizar este concepto.

Transacción - Ejemplo
Figura 1 – Ejemplo Básico de una Transacción Comercial - Venta

El cliente cumple la acción de pagar() y el vendedor cumple la acción de entregar(). Ambos procesos deben ser correctos. Por un lado, el cliente mediante la acción pagar(), el dinero debe cumplir ciertas reglas. Por ejemplo, que la cantidad sea la correcta, que el dinero resulte legítimo, que el pago se efectúe de forma presencial, etc. Por otro lado, el vendedor mediante la acción entregar(), debe también cumplir ciertos requisitos, como por ejemplo, entrega de la mercadería en tiempo y forma, el producto debe presentarse de una manera especial, debe estar intacto, etc. Ahora bien, para que la transacción se cumpla de forma satisfactoria, ambas reglas de juego para cada acción, deben ejecutarse de forma correcta y libre de errores o ambigüedades.

Si se produce algún tipo de error en dichas acciones, en una de ellas o en ambas, se dice que la transacción no es satisfactoria. En efecto, eso sucede a menudo cuando hay errores u otros tipos de desviaciones. Los fallos, en el caso comercial, se pueden dar por defectos de reglas, anomalías diversas, errores de sistemas o por malicia. Sea cual fuere el motivo, ante una situación de insatisfacción de la transacción, la operación debe abortarse cuanto antes.

En el caso de transferencia bancaria de dinero o valores, se produce un proceso de doble comprobación de saldo. Por un lado, se registra el dinero que pasa de una entidad a otra y, por el otro lado, se registra el movimiento. Esta doble verificación permite determinar si ambos procesos fueron satisfactorios. Es por ello que en contabilidad, se registran los movimientos contables como salidas o como entradas, mediante el debe y el haber.

En caso de error, el proceso es abortado inmediatamente. Eso mismo ocurre en los sistemas durante la transferencia de datos de un punto a otro, tal es el caso de valores o datos en pantallas que son cargados para ser almacenados en una base de datos. Analicemos la figura 2.

Saldo Comercial
Figura 2 – Registros Contables de cada Entidad y el Saldo como Comprobación de la Operación

Si observa el extracto de registros contables de cada ente comercial del ejemplo, notará que ambos registran un proceso de entrada y un proceso de salida. En el caso del Vendedor, se registra como salida el producto y como entrada el dinero. En el caso del Cliente, la situación es totalmente al revés, es decir, se registra como entrada el producto adquirido y como salida el dinero pagado. Pese a los puntos de vistas de las entidades, en ambos casos, el saldo es igual a cero pesos puesto que el proceso de la venta se cumplió satisfactoriamente. El saldo se obtiene como se muestra en la figura 3.

Saldo = Debe - Haber

El saldo puede ser negativo, positivo o neutro. Se dice que es negativo cuando juega en contra de la entidad, puesto que no es beneficiada. Esta falta de beneficio en un balance anual se registra como “pérdidas”. Las pérdidas puede darse por muchas razones, falta de cobro o cliente que no abonan desde hace tiempo “morosos” o dinero que fue hurtado, mal gastado o que giró en descubierto “pagar una deuda repentina o una reparación a último momento”, etc. Verá que existe un vasto listado de ejemplos contables.

Se dice que el saldo es positivo cuando juega a favor de la entidad y en los balances se registra como “ganancias”. Una ganancia es un beneficio que puede originarse por una venta oportuna “jugosa”, por un buen negocio o por tener excedente de ventas, en el caso de una entidad que vende productos. En el caso de un cliente, podría darse por comprar productos o pagar por ellos un costo menor de contado, acceso a promociones, etc.

Por último, se dice que el saldo es neutro cuando las cuentas equilibran o tienden a cero. Aquí no hay ni ganancias y ni pérdidas. Existe un equilibrio comercial y es lo que persigue todo ejercicio contable en una empresa como requisitos mínimos e indispensables. Lo más importante siempre serán las ganancias, aunque a veces y según la situación financiera de una empresa, puede que el equilibrio de sus cuentas impliquen un giro positivo en su ejercicio contable. En síntesis, depende del caso en cuestión.

Para ir cerrando, en el caso de sistemas orientado a transacciones directas hacia una base de datos, durante un proceso de transacción, se tomara el saldo neutral para verificar la doble comprobación en un proceso bilateral. En efecto, eso mismo hace el sistema cuando ejecuta un proceso orientado a una tarea que requiere de supervisación en tiempo real.

Transacciones en Sistemas de Gestión

La supervisación de procesos en un sistema de gestión donde se almacenan datos en una base de datos, requiere de un proceso de verificación dual. Si Ud., está dando una orden de guardar un dato, el dato debe guardarse y Ud., debe darse por enterado. Es decir, en dicho proceso, debe haber una suerte de interacción entre ambos puntos de negocio para que la comprobación y la acción sean efectivas. Además, será también interesante poder detener o abortar un proceso en caso de que suceda algún error.

Los procesos de transacciones los podremos utilizar desde el pase de sus valores a una variable y mediante la función mysqli_connect(). Esta función nos proporciona tres métodos y un conjunto de tres eventos relacionados entre sí. Los métodos son los siguientes:

AutoCommit

Este método inicia un proceso de transacción. El inicio de la transacción implica la activación en cierta forma de un escenario de supervisación, gestión de niveles de procesos y profundidad de aislación, en el caso de que existan transacciones anidadas.

MySQL propone un proceso de control de transacciones que pueden operar de forma supervisada o no. Si no se supervisa, las transacciones son directas y no pueden ser supervisadas para ser controladas por procesos exteriores. En cambio, cuando se activan las transacciones, la supervisión es gestionada de modo tal que pueden ser controladas exteriormente a través de los métodos Commit y Rollback respectivamente. Ambos métodos permitirán aceptar o cancelar todos los procesos dentro de escenarios de transacciones.

CommitEste método es utilizado para confirmar un proceso de supervisión y aceptar todas las reglas o procesos que sucedieron luego del comienzo de la transacción.
RollbackEste método es utilizado para descartar o abortar todo proceso desencadenado a partir de la supervisación o inicio de un proceso de transacción.

Nivel de Aislación – IsolationLevel

Las transacciones pueden ser simples o complejas. Cuando son simples son directas puesto que solo se trata de una supervisión sencilla de los procesos transactivos. Sin embargo, puede que sea necesario realizar más de un proceso de supervisión y, por tanto, entran en escena las transacciones complejas o anidadas.

En el caso de las transacciones complejas, para poder llevar un control y una gestión de todos los procesos de supervisación, se requiere de organizar todo este conjunto de transacciones en niveles. Estos niveles tienen cierto marco de prioridad por sobre las tareas de supervisión de cada uno de los procesos dados. Los niveles son conocidos con el nombre de aislaciones o (isolates en voz inglesa).

Como señalaba recientemente, los niveles de aislación tienen prioridades. Las prioridades permiten gestionar los niveles de aislaciones entre cada uno de los procesos de modo seguro y ordenado. De esta forma, se garantiza que cada proceso interno sea ejecutado de forma correcta y ordenada. Por ejemplo, si se tiene tres niveles de profundidad de transacciones, es decir, una transacción contenida en otra, se deberán ir resolviendo de forma escalonada cada una de ellas y en el orden de prioridades marcadas por la jerarquía de dichos niveles. Veamos un ejemplo para que se comprenda bien este concepto, ver figura 3.

Isolates
Figura 4 – Niveles de Aislación de las Transacciones

Para que expresamente comprendido este concepto, si el software debe resolver los problemas en cada capa o nivel, estos deberán resolverse desde el último nivel de aislación hasta el primero. Es decir, para resolver el nivel 1, primero debe resolverse el nivel 2 y para resolverse el nivel 2, debe resolverse el nivel 3. En consecuencia, hasta que el nivel 3 no se resuelva, no se podrán resolver los siguientes.

Analizar el Código de una Transacción con PHP para MySQL

El siguiente ejemplo de código analizaremos cómo se implementan transacciones operativas en sistemas con PHP orientadas a MySQL. Debajo del código, ampliaré los detalles del mismo.

<?php

      /**

       * @author Wagner, Ariel Alejandro

       * Enterprise Job Systems Solutions

       * @copyright 28/11/2010

       */

      /** Conectarse a la base de datos */

      $dbh = mysqli_connect($host, $user, $pass, $db);

      /**

       * Se procede a activar las transacciones para que puedan ser

       * controladas por métodos de procesos externos, tales como

       * Commit y RollBack respectivamente.

       *

       */

      mysqli_autocommit($dbh, FALSE);

      /** Se procede a desencadenar varios comandos de prueba. */

      /** Comando 1 */

      $result = mysqli_query($dbh, $query1);

      /**

      * Se procede a verificar si existen errores en los subsiguientes

      * procesos de gestión para el comando declarado.

      */

      if ($result !== TRUE) {

          mysqli_rollback($dbh);  // if error, roll back transaction

      }

      /** Comando 2 */

      $result = mysqli_query($dbh, $query2);

      /**

      * Se procede a verificar si existen errores en los subsiguientes

      * procesos de gestión para el comando declarado.

      */

      if ($result !== TRUE) {

          mysqli_rollback($dbh);  // if error, roll back transaction

      }

      /**

      * Llegado a este punto de los procesos, si las funciones de Rollback

      * han omitido los procesos, se supone entonces, que no ha habido errores

      * o que no se han interrumpido por alguna razón y, supone entonces,

      * que los datos están listo para ser efectivos en las base de datos.

      *

      * Por tanto, con la función Commit se asume que todos los cambios y los

      * datos son aceptados, por tanto se procede a ejecutar la función Commit.

      */

      mysqli_commit($dbh);

      /** Por último, se procede a cerrar la base de datos. */

      mysqli_close($dbh);

?>

El código empieza creando una instancia de la función mysqli_connect(…). Esta función contiene una serie de parámetros que son utilizados para establecer el nombre del servidor, el nombre de usuario, la contraseña y el nombre de la base de datos. La función pasa el valor objeto a una variable que, más tarde en el código, es utilizada para manipular el resto de las acciones directas hacia la base de datos y sus consultas dinámicas.

La variable de conexión llamada $dbh, es utilizada como parte del parámetro de la función mysqli_query(…), cuya función, que es utilizada para establecer el comando en cuestión. Este comando podría tratarse de una inserción, una actualización o una eliminación de datos. En el código, se enumera a modo de ejemplo dos comandos. La cantidad de comandos que se utilicen puede resultar en infinitas, al menos, en teoría claro está. Ahora bien, cada comando pasará un valor tipo booleano a una variable que, más tarde, se utilizará para determinar si el proceso de actualización o cambio ha tenido o no lugar en la base de datos.

La variable$resultes comparada en una estructura de decisión para determinar si el valor resultante es verdadero o falso. En caso de que la variable tenga el valor Verdadero o True, el proceso de actualización o cambio en la base de datos será descartado dado que la estructura de decisión forzará a que se utilice la función mysqli_rollback(…)que se encargará de deshacer todos los cambios que se hayan producido hasta el momento.

En caso contrario, si la variable equivale a Falso o False, supone entonces que los cambios deben ser aceptados. En efecto, esto mismo sucederá cuando luego de pasar por el resto de las estructuras del código se llegue al punto donde se encuentra la función llamada mysqli_commit(…). Esta función se encargará de confirmar todos los cambios realizados hasta el momento y ejecutarlos en el sistema para que estos se concluyan definitivamente. Por último y para ir cerrando esta descripción final del código, la funciónmysqli_close(…), se encarga de cerrar la conexión hacia la base de datos y la liberación de los recursos del sistema.

Nuestras novedades en tu e-mail

Escribe tu e-mail:

Al presionar "Recibir" estás dándote de alta y aceptas las condiciones legales de mailxmail

Cursos similares a Curso de MySQL con PHP


  • Vídeo
  • Alumnos
  • Valoración
  • Cursos
1. Windows. Instalación de Apache, MySQL y PHP
El proceso para instalar Apache en Windows es muy sencillo.  Con este video te... [12/10/10]
1.759
Curso con video
2. PHP y MySQL. Aplicaciones Web: PHP y base de datos MySQL (décima parte)
Programación de aplicaciones Web con PHP y MySQL. Ahora te enseñaremos a conectar a... [02/12/08]
3.751  
3. PHP y MySQL. Aplicaciones Web: base de datos MySQL III (novena parte)
Programación de aplicaciones Web con PHP y MySQL Seguimos con el estudio de la base... [02/12/08]
1.192  

¿Qué es mailxmail.com?|ISSN: 1699-4914|Ayuda
Publicidad|Condiciones legales de mailxmail


Ponte al día de Programación con nuestros cursos gratis