READ COMMITTED隔离级别的InnoDB X锁

时间:2019-01-25 01:16:21

标签: mysql select transactions sql-update read-committed

从MySQL词汇表:

  

读取已提交

     

具有此隔离级别的事务执行UPDATE ... WHERE或DELETE ... WHERE操作时,其他事务可能必须等待。事务可以执行SELECT ... FOR UPDATE和LOCK IN SHARE MODE操作,而无需等待其他事务

对吗?

UPDATE将x锁设置到它扫描的每一行,然后释放与WHERE部分不匹配的那些锁。其余行保持x锁,直到事务结束。据我所知,SELECT-FOR UPDATE会发生完全相同的事情。那么UPDATE可能会阻止其他事务但SELECT-FOR UPDATE不会阻止其他事务吗?

1 个答案:

答案 0 :(得分:1)

词汇表不准确。

SELECT FOR UPDATE会像UPDATE一样获得X锁。在这两种情况下,需要任何类型的锁的其他事务都必须等待。

SELECT FOR SHARE(或LOCK IN SHARE MODE)获取S锁。需要S锁的其他事务可以获取它们,但是需要X锁的其他事务需要等待。

事务隔离级别与所需的锁无关,除了当您的事务使用READ-COMMITTED时不需要某些类型的间隙锁。

似乎词汇表被忽略了。更好地阅读https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.htmlhttps://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html