Foros del Web » Programando para Internet » PHP »

Como obtener id para insertar en otra tabla

Estas en el tema de Como obtener id para insertar en otra tabla en el foro de PHP en Foros del Web. Hola a todos, Tengo una tabla en mysql que tiene, entre varias columnas, una llamada "cod_inmueble". En otra tabla llamada alquileres_temporales grabo los alquileres temporales ...
  #1 (permalink)  
Antiguo 02/03/2015, 19:55
 
Fecha de Ingreso: marzo-2015
Mensajes: 1
Antigüedad: 9 años, 8 meses
Puntos: 0
Pregunta Como obtener id para insertar en otra tabla

Hola a todos,
Tengo una tabla en mysql que tiene, entre varias columnas, una llamada "cod_inmueble".
En otra tabla llamada alquileres_temporales grabo los alquileres temporales de este inmueble y estos pueden ser más de un registro que estan asociados al mismo cod_inmueble.

Les comento ademas que estoy haciendo todo por medio de transacciones, con lo cual no puedo conocer el cod_inmueble hasta que no haga commit.

El punto aquí es que si hago commit despues del insert en la tabla inmuebles para conocer el cod_inmueble y agregar este en los insert de alquileres_temporales, puede pasar que al querer conocer el ultimo id auto-incrementable (o sea cod_inmueble) me pueda trae otro codigo... ¿por que digo esto ultimo? Porque puede pasar que se hagan dos insert simultaneos y me devuelva el ultimo cod_inmueble que no corresponda.

En fin, mi pregunta es la siguiente:
¿Como puedo hacer para obtener el cod_inmueble y asignarselo a la tabla alquileres_temporales para los N registros que tenga que guardar en ella?

Espero haya podido ser claro

Saludos! Diego
  #2 (permalink)  
Antiguo 02/03/2015, 20:25
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Como obtener id para insertar en otra tabla

Nunca se hacen 2 insert simultaneos si no utilizas 2 insert en la misma execución.
  #3 (permalink)  
Antiguo 03/03/2015, 06:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como obtener id para insertar en otra tabla

Cita:
Iniciado por diegote_h Ver Mensaje
Les comento ademas que estoy haciendo todo por medio de transacciones, con lo cual no puedo conocer el cod_inmueble hasta que no haga commit.

El punto aquí es que si hago commit despues del insert en la tabla inmuebles para conocer el cod_inmueble y agregar este en los insert de alquileres_temporales, puede pasar que al querer conocer el ultimo id auto-incrementable (o sea cod_inmueble) me pueda trae otro codigo... ¿por que digo esto ultimo? Porque puede pasar que se hagan dos insert simultaneos y me devuelva el ultimo cod_inmueble que no corresponda.
Hay algunas consideraciones del AUTO_INCREMENT en MySQL que debes leer del manual, porque no parece que hayas comprendido correctamente el comportamiento:
Cita:
You can retrieve the most recent AUTO_INCREMENT value with the LAST_INSERT_ID() SQL function or the mysql_insert_id() C API function. These functions are connection-specific, so their return values are not affected by another connection which is also performing inserts.
Es decir, dos conexiones operando en concurrencia, obtienen AI diferentes.
Cita:
If the previous statement returned an error, the value of LAST_INSERT_ID() is undefined. For transactional tables, if the statement is rolled back due to an error, the value of LAST_INSERT_ID() is left undefined. For manual ROLLBACK, the value of LAST_INSERT_ID() is not restored to that before the transaction; it remains as it was at the point of the ROLLBACK.
REsumiendo:
1) Si usas transacciones, no pueden generarse dos inserciones concurrentes en la misma tabla. La segunda espera hasta que termina la primera.

2) Si la primera termina, lo hace con un COMMIT o ROLLBACK. En el primer caso, la conexión de la primera obtiene el AI generado, mientras que la segunda sólo obtendría cero (undefinied value), aunque se ejecutase su busqueda antes de correr su propio INSERT.

3) La segunda transaccion jamás podría obtner el valor generado en la primera, sólo puede ver su propio valor generado. Por tanto, tu problema es inexistente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: autoincrementable, insert, mysql
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 17:16.