Comunidad de diseño web y desarrollo en internet online

Duda de Mysql y transacciones.

Citar            
MensajeEscrito el 30 Dic 2008 12:19 am
Lei ya un poco pero de esto no eh encontrado mucho, la respuesta me la imagino pero no esta por demas verificar.

Uso transacciones para gestionar el inventario de un almacen(salidas, entradas, traspasos), en el caso de salidas:


    1. Inserto los datos de la salida
    2. Actualizo el inventario de cada producto que sale
    3. Inserto los productos en la tabla salidaproductos usando como id un MAX a la tabla salida


Yo se que se envia todo el paquete y se hacen seguidos, pero mi pregunta es; que tal si despues(aunque sea por faraccion de segundos) de insertar la salida alguien mas inserta otra salida y al hacer el max para grabar los productos me devuelva el ID del que se grabo despues y no el que yo grabe en la transaccion.

Yo tengo la idea de que en las transacciones se hace todo en un conjunto y como si fuera una operacion, por lo que las demas operaciones, digamos una segunda insercion a salida, se mantienen en una especie de buffer o cola de espera. Asi que al Hacer el max dentro de la transaccion me devolvera el ID del que acabo de insertar. ¿Estoy bien?

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 30 Dic 2008 04:33 am

Jorgelig escribió:

Lei ya un poco pero de esto no eh encontrado mucho, la respuesta me la imagino pero no esta por demas verificar.

Uso transacciones para gestionar el inventario de un almacen(salidas, entradas, traspasos), en el caso de salidas:


    1. Inserto los datos de la salida
    2. Actualizo el inventario de cada producto que sale
    3. Inserto los productos en la tabla salidaproductos usando como id un MAX a la tabla salida


Yo se que se envia todo el paquete y se hacen seguidos, pero mi pregunta es; que tal si despues(aunque sea por faraccion de segundos) de insertar la salida alguien mas inserta otra salida y al hacer el max para grabar los productos me devuelva el ID del que se grabo despues y no el que yo grabe en la transaccion.

Yo tengo la idea de que en las transacciones se hace todo en un conjunto y como si fuera una operacion, por lo que las demas operaciones, digamos una segunda insercion a salida, se mantienen en una especie de buffer o cola de espera. Asi que al Hacer el max dentro de la transaccion me devolvera el ID del que acabo de insertar. ¿Estoy bien?

Para tu caso, yo preferiría usar el select last_insert_id() que es exclusivo de la conexión y transacción actual. Con eso toma el último ID que insertaste en esa conexión. En cambio el MAX busca el ID máximo, con el MAX si se puede presentar el problema que comentas.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 30 Dic 2008 05:12 am
Tnks man, lo probare.

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 30 Dic 2008 05:20 am
una pregunta mas, en el caso de las replicaciones; last_insert_id() me traeria el ultimo id insertado en cada servidor no?, porque lo que se pasa por replicacion es el sql y no los datos. En teoria el slave y el master deben tener llos mismos datos(ids y eso), pero digamos que no es el caso.

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 30 Dic 2008 06:13 am
Si en teoría debería funcionar igual, ya que es como copiar los sql y pegarlos en el server, el funcionamiento debería ser el mismo. :wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 30 Dic 2008 06:27 am
comúnmente para casos asi como facturas tengo 2 ID uno es el id interno que es un autonumerico, el cual realmente hace el trabajo y el otro es el que muestro al usuario el cual justamente podría ser con MAX() aun que me tendría que guardar de eliminar registros, este ultimo Id que se muestra al usuario seria colocado al final de toda la operación

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 30 Dic 2008 07:58 am

Inyaka escribió:

comúnmente para casos asi como facturas tengo 2 ID uno es el id interno que es un autonumerico, el cual realmente hace el trabajo y el otro es el que muestro al usuario el cual justamente podría ser con MAX() aun que me tendría que guardar de eliminar registros, este ultimo Id que se muestra al usuario seria colocado al final de toda la operación
Perdona man, no te entendi bien esa parte. Si es autoincrementable, entonces lo recuperas con un MAX o con la funcion que dice dano, en dado caso para que tener dos ids que hacen lo mismo ?

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.