如何检测插入的ID"插入忽略"声明?

时间:2014-05-14 01:26:09

标签: mysql sql insert

现在,在重复密钥更新"时,什么都不做。 所以,

INSERT IGNORE INTO t1 c1 VALUES(...,...,...);

last_insert_id最多只有一个id。

然后如何检测多个插入的ID"插入忽略"声明?

1 个答案:

答案 0 :(得分:0)

使用LAST_INSERT_ID()

我无法意识到常规批量INSERT可以返回多个LAST_INSERT_ID()。它将始终返回为该批量INSERT语句插入的第一个记录的ID。

您可以在其上查看说明here

的文档
  

生成的ID在服务器上维护   每个连接基础。这意味着返回的值   给定客户端的函数是生成的第一个AUTO_INCREMENT值   对于影响AUTO_INCREMENT列的最新语句   客户端。

强调为影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。因此,如上所述,通过批量INSERT插入的第一个成功行将是LAST_INSERT_ID()的返回值。

在InnoDB中使用LAST_INSERT_ID()和ROW_COUNT()

有一个替代解决方案as posted by Dag Sondre Hansen here可能适合您的需求。它确实假设您的表/数据库使用InnoDB。

  

如果您在最新版本的MySQL上使用InnoDB,您可以获得   使用LAST_INSERT_ID()和ROW_COUNT()。

的ID列表      

InnoDB在执行时保证AUTO INCREMENT的序号   批量插入,只要innodb_autoinc_lock_mode设置为0   (传统的)或1(连续的)。因此,您可以获得第一个   来自LAST_INSERT_ID()的ID和最后一个添加ROW_COUNT() - 1的内容。

请确保在INSERT声明之后直接在同一个连接上执行此操作,否则您将无法获得您期望的结果。