首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL中的默认并发控制实现

MySQL中的默认并发控制实现
EN

Stack Overflow用户
提问于 2020-07-11 15:47:16
回答 1查看 104关注 0票数 0

MySQL中并发控制的默认实现是什么?是乐观锁定(多版本并发控制),还是悲观锁定(两阶段锁定)?更确切地说,InnoDb是如何做到这一点的?在内部,mysql (使用innodb)如何决定事务的开始是锁定行,还是在冲突后回滚?

EN

回答 1

Stack Overflow用户

发布于 2020-07-12 23:59:58

InnoDB使用乐观锁定。

在事务开始时不存在锁定。在您执行特定查询之前,它如何知道要锁定哪些行?它甚至不知道您最终需要将行锁定在哪个(S)表中。

锁冲突后不需要回滚。如果您在一个事务中执行查询,而该事务由于另一个会话持有锁而必须等待,那么您的查询将等待特定的秒数(根据配置选项innodb_lock_wait_timeout,默认为50秒)。

  • 如果另一个会话在超时之前提交,则您的会话将停止等待,获取所需的锁,然后继续查询。
  • 如果您的等待在另一个会话提交之前超时,则查询将返回错误。这仍然不会回滚您的事务;您在事务期间所做的以前的更改仍然可以提交。您甚至可以再次尝试超时的查询。

异常:在死锁的情况下,InnoDB选择死锁中涉及的事务之一,并对其中一个事务强制执行回滚。它会尝试选择修改了较少行的事务。如果交易是捆绑的,那么选择是任意的。

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

https://stackoverflow.com/questions/62846528

复制
相关文章

相似问题

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