2009-02-18 29 views

Respuesta

52

This es lo que busca:

LAST_INSERT_ID() 

En respuesta al comentario de la OP, creé la siguiente prueba de banco:

CREATE TABLE Foo 
(
    FooId INT AUTO_INCREMENT PRIMARY KEY 
); 

CREATE TABLE Bar 
(
    BarId INT AUTO_INCREMENT PRIMARY KEY 
); 

INSERT INTO Bar() VALUES(); 
INSERT INTO Bar() VALUES(); 
INSERT INTO Bar() VALUES(); 
INSERT INTO Bar() VALUES(); 
INSERT INTO Bar() VALUES(); 

CREATE TRIGGER FooTrigger AFTER INSERT ON Foo 
    FOR EACH ROW BEGIN 
     INSERT INTO Bar() VALUES(); 
    END; 

INSERT INTO Foo() VALUES(); SELECT LAST_INSERT_ID(); 

Esto devuelve:

+------------------+ 
| LAST_INSERT_ID() | 
+------------------+ 
|    1 | 
+------------------+ 

Entonces usa el LAST_INSERT_ID() de la tabla original y no la tabla INSERT ed dentro del gatillo.

Editar: Me di cuenta después de todo este tiempo que el resultado de SELECT LAST_INSERT_ID() que se muestra en mi respuesta era incorrecto, aunque la conclusión al final fue correcta. He actualizado el resultado para que sea el valor correcto.

+0

Gracias Sean. ¿Cómo se comporta cuando la tabla en la que estoy insertando los datos tiene un activador que inserta datos en otra tabla que también tiene un campo de autoincrementación? ¿Devolvería la ID de la tabla original o la afectada por el desencadenante? – kristof

+0

Gracias Sean por probar esto – kristof

+0

Gracias ... Por la respuesta –

0

abierta MySql comando tipo SELECT LAST_INSERT_ID(); luego ENTER

Cuestiones relacionadas