MySQL中并发控制的默认实现是什么?是乐观锁定(多版本并发控制),还是悲观锁定(两阶段锁定)?更确切地说,InnoDb是如何做到这一点的?在内部,mysql (使用innodb)如何决定事务的开始是锁定行,还是在冲突后回滚?
发布于 2020-07-12 23:59:58
InnoDB使用乐观锁定。
在事务开始时不存在锁定。在您执行特定查询之前,它如何知道要锁定哪些行?它甚至不知道您最终需要将行锁定在哪个(S)表中。
锁冲突后不需要回滚。如果您在一个事务中执行查询,而该事务由于另一个会话持有锁而必须等待,那么您的查询将等待特定的秒数(根据配置选项innodb_lock_wait_timeout,默认为50秒)。
异常:在死锁的情况下,InnoDB选择死锁中涉及的事务之一,并对其中一个事务强制执行回滚。它会尝试选择修改了较少行的事务。如果交易是捆绑的,那么选择是任意的。
https://stackoverflow.com/questions/62846528
复制相似问题