原文链接:http://www.dubby.cn/detail.html?id=9048
如果想只用简单的查询语句查出刚刚插入的记录的自增ID,我们可能会想到select max(id) from table_name
,但是,很明显这是不可取的,只要稍微有点并发,这就是个错误的结果。
没错,使用LAST_INSERT_ID()
就可以了。
SELECT LAST_INSERT_ID()
为什么可以,因为这个是基于connection的,每个数据库连接是相互独立的,在使用各种ORM框架操作数据库时,步骤一般都是先从pool中拿一个连接出来,使用完再归还,所以,可以确保你在插入之后使用同一个connection来查询就可以获得正确的自增ID。
但是,如果你使用一条insert语句插入了多条数据,之后使用这条语句,只能查出第一条的自增ID。
mysql> USE test;
mysql> CREATE TABLE t (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL
);
mysql> INSERT INTO t VALUES (NULL, 'Bob');
mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
| 1 | Bob |
+----+------+
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
mysql> INSERT INTO t VALUES
(NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa');
mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
| 1 | Bob |
| 2 | Mary |
| 3 | Jane |
| 4 | Lisa |
+----+------+
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 2 |
+------------------+