SELECT LAST_INSERT_ID()

Sta*_*aba 6 java mysql sql mybatis last-insert-id

有人可以解释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>
Run Code Online (Sandbox Code Playgroud)

码:

System.out.println("Id : " + id)
Run Code Online (Sandbox Code Playgroud)

输出:

Id : 1
Run Code Online (Sandbox Code Playgroud)

Qua*_*noi 9

LAST_INSERT_ID返回隐式插入AUTO_INCREMENT当前会话中的列的最后一个值.

CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT NOT NULL);
Run Code Online (Sandbox Code Playgroud)

要使列自动增量,您应该从INSERT列表中省略它:

INSERT
INTO    mytable (value)
VALUES  (1)
Run Code Online (Sandbox Code Playgroud)

或者提供一个NULL值:

INSERT
INTO    mytable (id, value)
VALUES  (NULL, 1)
Run Code Online (Sandbox Code Playgroud)

之后,

SELECT  LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)

将返回AUTO_INCREMENT已插入id列的值.

如果符合以下条件,则无效

  1. 您为AUTO_INCREMENT列提供显式值
  2. 你打电话给LAST_INSERT_ID另一个会话
  3. 您在同一语句中插入多行(LAST_INSERT_ID()将返回插入的第一行的值,而不是最后一行的值).


Sil*_*viu 5

LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)

是按用户和每个连接.

您可以在MySQL doc中阅读更多内容.