Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Odpowiednik funkcji SQLServer SCOPE_IDENTITY() w mySQL?

To jest tym, czego szukasz:

LAST_INSERT_ID()

W odpowiedzi na komentarz OP stworzyłem następujący test laboratoryjny:

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

To zwraca:

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

Używa więc LAST_INSERT_ID() oryginalnej tabeli, a nie tabeli INSERT do wnętrza spustu.

Edytuj: Po tak długim czasie zdałem sobie sprawę, że wynik SELECT LAST_INSERT_ID() wykazana w mojej odpowiedzi była błędna, chociaż wniosek na końcu był słuszny. Zaktualizowałem wynik, aby był poprawną wartością.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Plik PHP nie może wprowadzić jakiejś części kodu

  2. Jak przekonwertować czas UTC na czas lokalny w MySQL?

  3. Różnice między bazami danych SQL i NoSQL — porównanie MySQL i MongoDB

  4. Różne sposoby przeglądania tabel w MySQL Server

  5. Importuj bazę danych do MySQL lub MariaDB