sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB LAST_INSERT_ID() Förklarad

I MariaDB, LAST_INSERT_ID() är en inbyggd funktion som returnerar det första automatiskt genererade värdet som framgångsrikt infogats för en AUTO_INCREMENT kolumnen som ett resultat av den senast körda INSERT uttalande.

Det kan också anropas med ett argument, i vilket fall returnerar det värdet på uttrycket och nästa anrop till LAST_INSERT_ID() returnerar samma värde.

Syntax

Funktionen kan anropas på följande sätt:

LAST_INSERT_ID()
LAST_INSERT_ID(expr)

Där expr returneras och nästa anrop till LAST_INSERT_ID() returnerar samma värde.

Exempel

Som ett exempel, låt oss skapa en tabell med en AUTO_INCREMENT kolumn:

CREATE TABLE guest (
  guest_id INT NOT NULL AUTO_INCREMENT,
  guest_name VARCHAR(255) NOT NULL,
  PRIMARY KEY (guest_id)
);

guest_id kolumnen använder AUTO_INCREMENT för dess värde.

Infoga nu några rader:

INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');

Låt oss nu köra LAST_INSERT_ID() :

SELECT LAST_INSERT_ID();

Resultat:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+

Den returnerar 3 .

Låt oss nu returnera alla rader i tabellen för att verifiera att den sista raden har en AUTO_INCREMENT värdet 3 infogat:

SELECT *
FROM guest;

Resultat:

+----------+------------+
| guest_id | guest_name |
+----------+------------+
|        1 | Homer      |
|        2 | Bart       |
|        3 | Marge      |
+----------+------------+

guest_id kolumnen går upp till 3 .

Inklusive ett argument

Som nämnts, om den anropas med ett argument, returnerar funktionen värdet för uttrycket och nästa anrop till LAST_INSERT_ID() returnerar samma värde.

SELECT LAST_INSERT_ID(9);

Resultat:

+-------------------+
| LAST_INSERT_ID(9) |
+-------------------+
|                 9 |
+-------------------+

Ring det nu igen, men utan argument:

SELECT LAST_INSERT_ID();

Resultat:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                9 |
+------------------+

Det returnerar fortfarande värdet 9 .

Men om vi fortsätter att infoga värden i vår guest tabellen, AUTO_INCREMENT kommer att fortsätta där det slutade på det bordet:

INSERT INTO guest (guest_name) VALUES ('Lisa');

Låt oss nu köra LAST_INSERT_ID() :

SELECT LAST_INSERT_ID();

Resultat:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                4 |
+------------------+

Den returnerar 4 .

Och så här ser tabellen ut nu:

SELECT *
FROM guest;

Resultat:

+----------+------------+
| guest_id | guest_name |
+----------+------------+
|        1 | Homer      |
|        2 | Bart       |
|        3 | Marge      |
|        4 | Lisa       |
+----------+------------+

För mer information om denna funktion, se MariaDB-dokumentationen.


  1. Varför är CTE bättre än markör/deriverad tabell/ subqueries/temp tabell etc.?

  2. Oracle Database 21c för Linux-plattformar

  3. MySQL-delsträngsextraktion med avgränsare

  4. Hur viktig är ordningen på kolumner i index?