有人能解释一下 MySQL 函数 LAST_INSERT_ID() 是如何工作的吗?我正在尝试获取数据库中最后插入的行的 ID,但每次都获取 1。
我用的是mybatis。
示例查询是:
<insert id="insertInto" parameterType="Something" timeout="0">
INSERT INTO something (something) VALUES (#{something})
<selectKey resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
代码:
System.out.println("Id : " + id)
输出:
Id : 1
最佳答案
LAST_INSERT_ID
返回在当前 session 中隐式插入到 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
列提供明确的值 - 您在另一个 session 中调用
LAST_INSERT_ID
- 您在同一语句中插入多行(
LAST_INSERT_ID()
将返回插入的第一行的值,而不是最后一行的值)。
关于java - 选择 LAST_INSERT_ID(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294122/