Comunidad de diseño web y desarrollo en internet online

conocer autoincrement con anticipacion

Citar            
MensajeEscrito el 10 Dic 2008 06:58 pm
Que tal, mi problema es el siguiente:

En una BD en mySQL Tengo una tabla 'T1' donde tengo un campo 'id' que tiene auto_increment. Si quiero insertar un registro a esa tabla solamente tengo que introducir los otros campos en T1 excepto 'id' ya que este último es asignado automáticamente (1,2,3,4,5,6,....etc).

El problema es que en este formulario tambien se capturan datos de otra tabla 'T2' en la cual existe un campo 'id_en_T1' el cual deberá ser el mismo que que 'id' en T1, mi problema es que no se como saber que numero le asignará pues esto pasa hasta que se inserta, lo que hice una vez fue


  1. Insertar los datos en tabla 1
  2. Buscar el registro recien insertado mediante un query

    Código :

    SELECT 'id' FROM 'T1' WHERE todos los campos sean igual al formulario enviado.
    Esto con el fin de restringir los resultados a solo uno, incluso le puse LIMIT 1
  3. Mediante el query del paso 2 obtengo el id y ese es el que utlizo para insertar en 'id_en_T1' de T2 pero tengo la sensacion de que esto no esta muy bien hecho, además de que no garantiza (segun yo) que obtenga el registro correcto ya que aunque sea raro puede ser que si exista varios registros con exactamente los mismos datos y por lo tanto el id sea el incorrecto.


Todo sería mas facil si existiera una forma de saber que valor le asiganará con el autoincrement. espero me halla hecho entender. Agradezco toda la ayuda de antemano.

Por nodream

Claber

99 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Dic 2008 07:57 pm
Hola nodream, en postgresql existe esto:

Código :

SELECT last_value FROM 'secuencia_relacionada_con_el campo'
Lo que devuelve es el valor que va a tomar el campo al hacer una inserción, pero esto tiene un problema, y es que si múltiples usuarios están accediendo a la aplicación concurrentemente existe la posibilidad de que alguien más haga una inserción justo después de tomar el last_value y antes de realizar nuestra inserción, por lo que las validaciones que se hayan hecho serían erroneas ya que el valor con que se hicieron dichas validaciones sería otro diferente al que se utilizó para la inserción...

También existe:

Código :

SELECT currval('secuencia_relacionada_con_el campo')
Que devuelve el valor que acabas de insertar sin importar que alguien más haga una inserción en la misma tabla, ese SELECT retornará el valor que tomó el campo cuando se realizó la inserción nuestra, el detalle para tu problema es que el valor lo obtiene luego de hacer la inserción y no antes como lo necesitas...

Se que no te ayuda directamente, pero es para que tengas una idea de que buscar y averigües si existen equivalentes en MySQL... Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 10 Dic 2008 08:07 pm
Gracias por la pronta respueta parece que si hay una funcion que mysql_insert_id() en mySQL obviamente que sirve para lo que me dices, gracias por el dato. Lo probaré y comento los resultados.

Por nodream

Claber

99 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Dic 2008 12:00 am
yo sinceramente no te recomiendo el autoincrement ;-) por seguridad y estabilidad en la base de datos yo recomiendo mas una tabla auxiliar de consecutivos saludos

Por talcual

686 de clabLevel



 

Colombia

firefox

 

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