我读到 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