LAST_INSERT_ID()

语法说明

若表中含自增字段 AUTO_INCREMENT,则向表中插入一条记录后,可以调用 LAST_INSERT_ID() 来获得最近插入的那行记录的自增字段值。

如果没有插入参数,LAST_INSERT_ID() 返回一个 BIGINT UNSIGNED(64 位)值,该值表示作为最近执行的 INSERT 语句的结果成功插入到 AUTO_INCREMENT 列的第一个自动生成的值。返回值取决于之前 AUTO_INCREMENT 列的值,如果你之前没有插入一个列,那么返回值从 1 开始,如果你之前插入了一个列,那么返回值为 AUTO_INCREMENT 列的值增加 1。

如果没有成功插入参数,LAST_INSERT_ID() 的值保持不变。

在 MySQL 中,如果使用单个 INSERT 语句插入多行,则 LAST_INSERT_ID() 仅返回为第一个插入行生成的值。例如:

  1. mysql> CREATE TABLE t (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(10) NOT NULL);
  2. mysql> INSERT INTO t VALUES (NULL, 'Bob');
  3. mysql> SELECT * FROM t;
  4. +----+------+
  5. | id | name |
  6. +----+------+
  7. | 1 | Bob |
  8. +----+------+
  9. mysql> SELECT LAST_INSERT_ID();
  10. +------------------+
  11. | LAST_INSERT_ID() |
  12. +------------------+
  13. | 1 |
  14. +------------------+
  15. mysql> INSERT INTO t VALUES (NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa');
  16. mysql> SELECT * FROM t;
  17. +----+------+
  18. | id | name |
  19. +----+------+
  20. | 1 | Bob |
  21. | 2 | Mary |
  22. | 3 | Jane |
  23. | 4 | Lisa |
  24. +----+------+
  25. mysql> SELECT LAST_INSERT_ID();
  26. +------------------+
  27. | LAST_INSERT_ID() |
  28. +------------------+
  29. | 2 |
  30. +------------------+

但是在 MatrixOne 中,我们有不同的行为;如果使用单个 INSERT 语句插入多行,则 LAST_INSERT_ID() 返回为最后插入的行生成的值。与上面的示例一样,当您执行 INSERT INTO t VALUES (NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa'); 时,LAST_INSERT_ID() 将返回 4。

语法结构

  1. LAST_INSERT_ID(), LAST_INSERT_ID(expr)

示例

  1. create table t1(a int auto_increment primary key);
  2. insert into t1 values();
  3. mysql> select last_insert_id();
  4. +------------------+
  5. | last_insert_id() |
  6. +------------------+
  7. | 1 |
  8. +------------------+
  9. 1 row in set (0.02 sec)
  10. insert into t1 values(11);
  11. insert into t1 values();
  12. mysql> select last_insert_id();
  13. +------------------+
  14. | last_insert_id() |
  15. +------------------+
  16. | 12 |
  17. +------------------+
  18. 1 row in set (0.02 sec)
  19. insert into t1 values(null);
  20. mysql> select last_insert_id();
  21. +------------------+
  22. | last_insert_id() |
  23. +------------------+
  24. | 13 |
  25. +------------------+
  26. 1 row in set (0.02 sec)
  27. create table t2(a int auto_increment primary key);
  28. insert into t2 values();
  29. mysql> select last_insert_id();
  30. +------------------+
  31. | last_insert_id() |
  32. +------------------+
  33. | 1 |
  34. +------------------+
  35. 1 row in set (0.02 sec)
  36. insert into t2 values(100);
  37. insert into t2 values();
  38. mysql> select last_insert_id();
  39. +------------------+
  40. | last_insert_id() |
  41. +------------------+
  42. | 101 |
  43. +------------------+
  44. 1 row in set (0.02 sec)