SELECT LAST_INSERT_ID()
有人可以解释MySQL函数LAST_INSERT_ID()的工作原理。 我想在数据库中获取最后一行插入的id,但每次都得到1。
我用mybatis。
示例查询是:
INSERT INTO something (something) VALUES (#{something}) SELECT LAST_INSERT_ID()
码:
System.out.println("Id : " + id)
输出:
Id : 1
LAST_INSERT_ID
返回隐式插入当前会话的AUTO_INCREMENT
列的最后一个值。
CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT NOT NULL);
要使列自动增量,您应该从INSERT
列表中省略它:
INSERT INTO mytable (value) VALUES (1)
或者为它提供NULL
值:
INSERT INTO mytable (id, value) VALUES (NULL, 1)
之后,
SELECT LAST_INSERT_ID()
将返回AUTO_INCREMENT
已插入id
列的值。
如果符合以下条件,则无效
- 您为
AUTO_INCREMENT
列提供显式值 - 您在另一个会话中调用
LAST_INSERT_ID
- 您在同一语句中插入多行(
LAST_INSERT_ID()
将返回插入的第一行的值,而不是最后一行的值)。
LAST_INSERT_ID()
是按用户和每个连接。
您可以在MySQL doc中阅读更多内容。
我还没有使用MyBatis,但是在向表中插入内容之后,请使用以下MySQL查询检查auto_increment值是否正在更新:
SELECT Auto_increment FROM (SHOW TABLE STATUS LIKE '') as A;
还要确保您没有给auto_increment
字段赋予明确的值。 您需要让DB为自己设置它。
以下是您可以尝试的其他一些事项:
-
确保以整数forms读取结果。 这显示了一个需要显式转换为Int32的类似情况。
-
如果您正在进行多次插入,请知道只将第一个插入的元组的ID视为
LAST_INSERT_ID
。 根据这个 (搜索use test
)。
我有两个解决方案,在实现了很复杂之后我发现了第二个…我会告诉你第二个哪个更好…这很简单…只是在查询中插入这个keyProperty="id"
像这样:
查询返回插入行的id谢谢!
例1:
mysql> CREATE TABLE prime2 LIKE prime; Query OK, 0 rows affected (0.08 sec) mysql> SELECT LAST_INSERT_ID(); //From table prime!!! +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) mysql> INSERT INTO prime2 VALUES(1,1); Query OK, 1 row affected (0.01 sec) mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) //From table prime!!!
您必须使用表名来选择最后一个插入ID。
例:
SELECT LAST_INSERT_ID() FROM my_table;