2009-02-18 12 views

risposta

52

This è quello che state cercando:

LAST_INSERT_ID() 

In risposta al commento del PO, ho creato il seguente banco di prova:

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(); 

Ciò restituisce:

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

Quindi utilizza lo LAST_INSERT_ID() della tabella originale e non la tabella INSERT all'interno del trigger.

Modifica: Mi sono reso conto dopo tutto questo tempo che il risultato dello SELECT LAST_INSERT_ID() mostrato nella mia risposta era errato, anche se la conclusione alla fine era corretta. Ho aggiornato il risultato per essere il valore corretto.

+0

Grazie Sean. Come si comporta quando la tabella in cui sto inserendo i dati ha un trigger che inserisce dati in un'altra tabella che ha anche un campo di autoincremento? Restituisce l'ID della tabella originale o quella influenzata dal trigger? – kristof

+0

Grazie Sean per testare questo – kristof

+0

Grazie ... per la risposta –

0

aperta MySql comando tipo SELECT LAST_INSERT_ID(); poi ENTER