mysql INNODB如何实现READ-UNCOMMITTED?
How does mysql INNODB implement READ-UNCOMMITTED?
我看了mysqlINNODB使用MVCC(乐观)解决READ_COMMITTED和REPEATABLE_READ隔离级别(和)2PL(悲观)解决SERIALIZABLE。但是没有提到它如何解决 READ_UNCOMMITTED.
我用 READ_UNCOMMITTED 隔离级别打开了两个 mysql 会话。在这两个会话中,我都尝试更新相同的记录。在第一个会话中,它得到了更新,但在第二个会话中,它正在等待第一个会话到 commit/rollback。谁锁了这个?因为显然这里没有 MVCC 或 2PL 的参与。
写-写冲突 -> 此外,我在所有隔离级别中看到了相同的行为,至少在 READ_COMMITTED 和 REPEATABLE_READ 中,它们由 MVCC 解决,当第一个会话更新了一行,然后第二个会话等待。我知道 MVCC 在
的情况下不会锁定
i) 第一节阅读(和)第二节阅读
ii)第一节写作(和)第二节阅读
iii) 第一节阅读(和)第二节写作
这符合“读者不会阻止作者,作者不会阻止读者”的说法。
但是,在这种情况下,
iv) First session writing (and) Second session writing - INNODB 是否锁定事务并等待其他 commits/rollback 的?
Mysql版本:5.7.32
引擎:INNODB
无论隔离级别如何,都会发生锁定。 Read-uncommitted 不是混战。
第一个会话锁定它作为更新的一部分检查的行,其方式与在任何其他隔离级别中的方式完全相同。会话持有这些锁,直到它提交其事务或回滚。这也与任何其他隔离级别相同。
顺便说一句,在使用 SQL 数据库 30 多年的时间里,我从未遇到过未提交读的合法用途。
我看了mysqlINNODB使用MVCC(乐观)解决READ_COMMITTED和REPEATABLE_READ隔离级别(和)2PL(悲观)解决SERIALIZABLE。但是没有提到它如何解决 READ_UNCOMMITTED.
我用 READ_UNCOMMITTED 隔离级别打开了两个 mysql 会话。在这两个会话中,我都尝试更新相同的记录。在第一个会话中,它得到了更新,但在第二个会话中,它正在等待第一个会话到 commit/rollback。谁锁了这个?因为显然这里没有 MVCC 或 2PL 的参与。
写-写冲突 -> 此外,我在所有隔离级别中看到了相同的行为,至少在 READ_COMMITTED 和 REPEATABLE_READ 中,它们由 MVCC 解决,当第一个会话更新了一行,然后第二个会话等待。我知道 MVCC 在
的情况下不会锁定i) 第一节阅读(和)第二节阅读
ii)第一节写作(和)第二节阅读
iii) 第一节阅读(和)第二节写作
这符合“读者不会阻止作者,作者不会阻止读者”的说法。 但是,在这种情况下,
iv) First session writing (and) Second session writing - INNODB 是否锁定事务并等待其他 commits/rollback 的?
Mysql版本:5.7.32 引擎:INNODB
无论隔离级别如何,都会发生锁定。 Read-uncommitted 不是混战。
第一个会话锁定它作为更新的一部分检查的行,其方式与在任何其他隔离级别中的方式完全相同。会话持有这些锁,直到它提交其事务或回滚。这也与任何其他隔离级别相同。
顺便说一句,在使用 SQL 数据库 30 多年的时间里,我从未遇到过未提交读的合法用途。