首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在"insert ignore“语句中检测插入的ids?

问如何在"insert ignore“语句中检测插入的ids?
EN

Stack Overflow用户
提问于 2014-05-14 09:26:09
回答 1查看 518关注 0票数 0

现在,当“更新重复密钥”时什么也不做。所以,

代码语言:javascript
复制
INSERT IGNORE INTO t1 c1 VALUES(...,...,...);

last_insert_id最多只能有一个id。

那么如何在"insert ignore“语句中检测多个插入的ids呢?

EN

回答 1

Stack Overflow用户

发布于 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语句之后,否则将不会得到预期的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23644201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档