Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/04/2013, 19:53
Avatar de catpaw
catpaw
 
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
crear transaccion para asegurar proceso

hola!!

Veran, tengo un proceso el cual usa 2 tablas "de paso" es decir, el usuario le da al boton y el programa, hace mas o menos lo siguiente:

1- select * from tabla1 //para extraer datos
2- delete tabla2 //resetear tabla
3- procesamiento y calculo de datos extraidos y generacion de nuevos datos
4- insercion de datos extraidos y generados en tabla2
5- presentacion de datos y de formulario con un boton que al presionarlo hace:

6- delete tabla3
7- select * a tabla2 where condicion1
8- proceso de datos extraidos y generacion de datos nuevos
9- insercion de datos tabla3
10- select * a tabla2 where condicion2
11- proceso de datos extraidos y generacion de datos nuevos
12- insercion de datos tabla3
13- select * tabla3 INTO OUTFILE a un txt
14- presentacion de datos y boton de descarga del txt

al final se genera un txt con los datos procesados y calculados de la tabla3

Se debe evitar que si un usuario a empezado el proceso, otro NO pueda usar las tablas ya que se cruzarian los datos y podrian obtener errores en el archivo de salida.

la idea seria "bloquear" las 2 tablas al inicio del proceso y desbloquerlas una vez que se haya generado el txt

he estado leyendo sobre innodb (el motor de mis tablas), sobre su tipos de bloqueo a nivel linea (shared S, exclusive X) y tabla (intention shared IS, intention exclusive IX) [si estoy mal corrijanme porfas]

el caso es que quisiera aplicar eso, seria un IX sobre las 2 tablas mientras se procesa la info.

Entiendo que debo crear una transaccion, mas o menos de la siguiente manera:

>BEGIN;
>QUERIES (selects, inserts, updates, ect -> todo mi proceso)
>COMMIT;

pero haber,

aqui en que momento declaro el IX y como?
y si tengo mi proceso en dos archivos php, es decir del paso 1 al 5 esta en pagina1.php y del 6 al 14 en pagina2.php, esto en que afecta la transaccion, en la parte de queries?
y puede haber la posibilidad de que el usuario no accione el boton del paso 5, que es el que hace que pase al paso 6 (un submit a pagina2.php) como podria "expirar" la transaccion despues de un tiempo considerable en que no se ha pasado del paso 5 al 6 (rollback)

agradezco sus comentarios