Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/03/2015, 06:15
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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)