sql >> Databáze >  >> RDS >> Mysql

Ekvivalent funkce SQLServeru SCOPE_IDENTITY() v mySQL?

Toto je to, co hledáte:

LAST_INSERT_ID()

V reakci na komentář OP jsem vytvořil následující bench test:

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

Toto vrátí:

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

Takže používá LAST_INSERT_ID() původní tabulky a nikoli tabulky INSERT ed do vnitřku spouště.

Upravit: Po takové době jsem si uvědomil, že výsledek SELECT LAST_INSERT_ID() uvedená v mé odpovědi byla špatná, ačkoli závěr na konci byl správný. Aktualizoval jsem výsledek, aby měl správnou hodnotu.



  1. Přírůstek identity sloupce SQL Server 2012 skok z 6 na 1000+ u 7. položky

  2. Nejrychlejší způsob, jak najít zastaralé funkce, které se stále používají v instanci SQL Server (příklad T-SQL)

  3. Zkopírujte tabulku z jedné databáze do druhé v Postgresu

  4. Jak převést řetězec na datum/čas na serveru SQL pomocí CAST()