现在,当“更新重复密钥”时什么也不做。所以,
INSERT IGNORE INTO t1 c1 VALUES(...,...,...);last_insert_id最多只能有一个id。
那么如何在"insert ignore“语句中检测多个插入的ids呢?
发布于 2014-05-14 10:19:12
使用LAST_INSERT_ID()的
我不知道常规的批量INSERT可以返回多个LAST_INSERT_ID()。它将始终返回为该bulk INSERT语句插入的第一条记录的ID。
您可以查看上面的文档,该文档解释了here
生成的ID以每个连接为基础在服务器中维护。这意味着函数返回给给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。
强调为影响AUTO_INCREMENT列的最近语句生成的第一个AUTO_INCREMENT值。因此,如上所述,通过批量INSERT成功插入的第一行将是LAST_INSERT_ID()的返回值。
将LAST_INSERT_ID()和ROW_COUNT()与InnoDB结合使用
还有一种替代方案as posted by Dag Sondre Hansen here,它可能适合您的需求。不过,它确实假定您的表/数据库使用InnoDB。
如果您在最新版本的MySQL上使用InnoDB,则可以使用LAST_INSERT_ID()和ROW_COUNT()获取If列表。
如果innodb_autoinc_lock_mode设置为0(传统型)或1(连续),则在执行批量插入时,InnoDB保证自动递增的序列号。因此,您可以从LAST_INSERT_ID()获得第一个ID,通过添加ROW_COUNT()-1获得最后一个ID。
只需确保您在同一连接上执行此操作,紧跟在您的INSERT语句之后,否则将不会得到预期的结果。
https://stackoverflow.com/questions/23644201
复制相似问题