首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入忽略锁定表,即使它忽略插入?

插入忽略锁定表,即使它忽略插入?
EN

Stack Overflow用户
提问于 2013-08-11 08:47:38
回答 1查看 3.5K关注 0票数 1

在MySQL中,如果有一个INSERT IGNORE命令,由于唯一性约束,它最终不会插入到表中。它会问并等待写锁吗?或者,MySQL是否识别忽略关键字,并在写锁之前使用读锁,并且只有当它真正需要写入时才会请求写入锁?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-11 22:28:18

这取决于引擎- MyIsam和InnoDb的行为不同。

对于MyIsam表,如果表中已经存在记录(即使尚未完成),则其他会话中相同记录(相同唯一键)的常规插入会报告重复键错误-因此INSERT忽略只会忽略错误并继续进行。

在InnoDB表上,如果记录未被锁定,常规插入将立即报告重复的键错误(插入忽略将跳过错误并继续)。

但是,如果该记录被另一个会话锁定(例如,该记录被插入但尚未完成,或者该记录被一个UPDATE或DELETE或SELECT UPDATE命令锁定),则INSERT命令将“挂起”并等待到另一个会话将删除该锁(通过提交或回滚)。然后,如果删除锁后记录仍然存在,INSERT将报告错误(INSERT忽略将忽略错误),但是如果记录不存在,INSERT将将此记录添加到表中。

忽略关键字只是说“如果有任何错误,请忽略它,继续”,但它不会影响锁定行为。

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

https://stackoverflow.com/questions/18170235

复制
相关文章

相似问题

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