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)

11. insert into t1 values(11);
12. insert into t1 values();
13. mysql> select last_insert_id();
14. +------------------+
15. | last_insert_id() |
16. +------------------+
17. |               12 |
18. +------------------+
19. 1 row in set (0.02 sec)

21. insert into t1 values(null);
22. mysql> select last_insert_id();
23. +------------------+
24. | last_insert_id() |
25. +------------------+
26. |               13 |
27. +------------------+
28. 1 row in set (0.02 sec)

30. create table t2(a int auto_increment primary key);
31. insert into t2 values();
32. mysql> select last_insert_id();
33. +------------------+
34. | last_insert_id() |
35. +------------------+
36. |                1 |
37. +------------------+
38. 1 row in set (0.02 sec)

40. insert into t2 values(100);
41. insert into t2 values();
42. mysql> select last_insert_id();
43. +------------------+
44. | last_insert_id() |
45. +------------------+
46. |              101 |
47. +------------------+
48. 1 row in set (0.02 sec)