现在,在重复密钥更新"时,什么都不做。 所以,
INSERT IGNORE INTO t1 c1 VALUES(...,...,...);
last_insert_id最多只有一个id。
然后如何检测多个插入的ID"插入忽略"声明?
答案 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
声明之后直接在同一个连接上执行此操作,否则您将无法获得您期望的结果。