Foros del Web » Programando para Internet » PHP »

mejorar/optimizar transaccion

Estas en el tema de mejorar/optimizar transaccion en el foro de PHP en Foros del Web. hola Hice la busqueda correspondiente al foro sobre el tema de transaccione, encontre mucha informacion que me ha sesrvido para aclararme en este tema, ya ...
  #1 (permalink)  
Antiguo 08/04/2013, 18:25
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
mejorar/optimizar transaccion

hola

Hice la busqueda correspondiente al foro sobre el tema de transaccione, encontre mucha informacion que me ha sesrvido para aclararme en este tema, ya solo me gustaria su punto de vista, este es un ejemplo de una trasaccion que implementare:

Código PHP:
Ver original
  1. $con_db = conecta_db();
  2. mysql_query("SET AUTOCOMMIT=0;");
  3. mysql_query("BEGIN;");
  4. mysql_query("DELETE FROM uno");
  5. mysql_query("LOAD DATA LOCAL INFILE 'prueba.txt' INTO TABLE uno FIELDS TERMINATED BY '|'");
  6. mysql_query("DELETE FROM dos");
  7. $query = mysql_query("SELECT * FROM uno ");
  8. $i=1;
  9. $retval = 0;
  10. while($registro = mysql_fetch_array($query)){
  11.     echo $registro['clave']." - ".$registro['nombre']."<br />";
  12.     //insert tabla2
  13.     $insercion1 = mysql_query("INSERT INTO dos (clave, calle, colonia) VALUES ('$i', '$i', '$i');");
  14.     if($insercion1){ //si hubo afectaciones
  15.         $retval = 1;
  16.     }
  17.     $i++;
  18. }
  19. if($retval==0){
  20.     echo 'MAL no insercion table dos: SE EJECUTA EL ROLLBACK<br />';
  21.     mysql_query("ROLLBACK");
  22. } else{
  23.     //select into de tabla2 for update
  24.     $resultado = mysql_query("SELECT * INTO OUTFILE 'C:/wamp/www/transaccion/prueba2.txt' FIELDS TERMINATED BY '' LINES TERMINATED BY '\\n' FROM dos FOR UPDATE");
  25.     if($resultado){
  26.         echo 'OK: SE EJECUTA EL COMMIT<br />';
  27.         mysql_query("COMMIT");
  28.     }
  29.     else{
  30.         echo 'MAL: SE EJECUTA EL ROLLBACK<br />';
  31.         mysql_query("ROLLBACK");
  32.     }
  33. }
  34. $con_db = desconecta_db($con_db);

Aclaro que lei sobre el uso de mysqli y del cual estoy conciente que debo ir reemplazando poco a poco en mis sistemas.

Tambien quise implementar el try/catch pero como mysql/mysqli no tiene aun soporte para excepciones (corrijanme si estoy mal) decide dejar las validaciones con if/else

Es importante mencionar que ocupo select for update porque la intencion de este sistemita es que se realice un proceso que ocupara dos tablas de paso las cuales deben estar inaccesibles para leer/escribir mientras el usuario este haciendo el proceso.

el archivo prueba.txt contiene:

Código:
1|dexter|
2|ronaldo|
3|lucrecia|
4|rusky|
5|jordana|
y la salida (prueba2.txt):

Código:
1          1                1
2          2                2
3          3                3
4          4                4
5          5                5

lo cual es correcto

bueno les agradezco de antemano
  #2 (permalink)  
Antiguo 09/04/2013, 11:33
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: mejorar/optimizar transaccion

Solo saqueme de la duda

al hacer commit/rollback se liberarian las tablas del bloqueo?

o al hacer commit/rollback y desconectar la conexion?

Etiquetas: mysql, registro, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:16.