sql >> Databasteknik >  >> RDS >> Mysql

Motsvarigheten till SQLServer-funktionen SCOPE_IDENTITY() i mySQL?

Detta är vad du letar efter:

LAST_INSERT_ID()

Som svar på OP:s kommentar skapade jag följande bänktest:

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

Detta returnerar:

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

Så den använder LAST_INSERT_ID() av den ursprungliga tabellen och inte tabellen INSERT ed inuti avtryckaren.

Redigera: Jag insåg efter all denna tid att resultatet av SELECT LAST_INSERT_ID() visade i mitt svar var fel, även om slutsatsen i slutet var korrekt. Jag har uppdaterat resultatet till det korrekta värdet.



  1. Hur man skapar ett unikt index där kolumnordningen inte beaktas (set?)

  2. Hur man VÄLJER FRÅN lagrad procedur

  3. Reducerar parametern postgresql.conf, åt gången

  4. Hur kan jag få en vanlig postgres-databasdump på heroku?