java - 选择 LAST_INSERT_ID()

标签 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>

代码:

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 列中的值。

如果出现以下情况,这将不起作用:

  1. 您为 AUTO_INCREMENT 列提供明确的值
  2. 您在另一个 session 中调用 LAST_INSERT_ID
  3. 您在同一语句中插入多行(LAST_INSERT_ID() 将返回插入的第一行的值,而不是最后一行的值)。

关于java - 选择 LAST_INSERT_ID(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294122/

相关文章:

java - 将 HibernateCursorItemReader 与 EntitymanagerFactory 结合使用

mysql - 在命令提示符下获取 MySQL 路径

mysql - MySQL 中是否有类似 PostgreSQL 的数组数据类型?

SQL Server 根据另一个表替换字符串

sql - 如何在 MySQL 中执行 FULL OUTER JOIN?

java - junit 3 的故障跟踪窗口不显示预期值

java创建带有页眉和页脚的pdf

java - 字符串格式的文件位置

php - 如何在php中显示来自mysql数据库的html

sql - 如何在 SQL (Oracle) 中随机排列数据?