【发布时间】:2021-07-23 15:35:38
【问题描述】:
我读到 mysql INNODB 使用 MVCC(乐观)来解决 READ_COMMITTED 和 REPEATABLE_READ 隔离级别(和)2PL(悲观)来解决 SERIALIZABLE。但没有提到它如何解决 READ_UNCOMMITTED。
-
我打开了两个具有 READ_UNCOMMITTED 隔离级别的 mysql 会话。在这两个会话中,我都尝试更新相同的记录。在第一个会话中,它得到了更新,但在第二个会话中,它正在等待第一个会话提交/回滚。这是谁锁的?因为这里显然没有 MVCC 或 2PL 的参与。
-
写-写冲突 -> 另外,我在所有隔离级别中都看到了相同的行为,至少在 READ_COMMITTED 和 REPEATABLE_READ 中,这是由 MVCC 解决的,当第一个会话更新一行时,第二个会话等待。我知道 MVCC 在以下情况下不会锁定,
i) 第一次阅读(和)第二次阅读
ii)第一次写作(和)第二次阅读
iii) 第一次阅读(和)第二次写作
“读者不会阻止作家,作家不会阻止读者”这句话是正确的。 但是,在这种情况下,
iv) 第一次会话写入(和)第二次会话写入 - INNODB 是否锁定事务并等到其他提交/回滚?
Mysql 版本:5.7.32 引擎:INNODB
【问题讨论】:
标签: mysql concurrency innodb isolation-level mvcc