首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在INSERT..ON重复密钥更新语句中进行锁定?

如何在INSERT..ON重复密钥更新语句中进行锁定?
EN

Database Administration用户
提问于 2013-10-28 12:49:23
回答 2查看 4.6K关注 0票数 2

我在尝试使用INSERT..ON重复密钥更新更新多个行(一个批处理)时遇到了死锁。MySQL是将所有行锁定在一个批处理中,还是只在某个时间点锁定正在更新的行?

EN

回答 2

Database Administration用户

发布于 2013-10-28 13:35:19

这将取决于存储引擎。

  • MyISAM:执行表级锁。因此,所有行都被锁定。
  • InnoDB:使用行级锁.由于InnoDB是事务性的,所以所有行都会被强制锁定。在运行SHOW ENGINE INNODB STATUS\G时,这些锁将是可见的。如果希望预先手动锁定这些行以防止共享,则可以运行选择。更新
票数 1
EN

Database Administration用户

发布于 2018-11-30 02:56:09

从mysql 5.7开始,如果值(有唯一索引)不存在,它将获得间隙锁。

插入..。选择。在重复键更新和加载数据时,并发替换的锁太弱,导致并发SELECT语句返回不一致结果的可能性。(Bug #38046,Bug #11749055)

有关详细信息,请参阅此链接:

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-0.html

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

https://dba.stackexchange.com/questions/52323

复制
相关文章

相似问题

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