使用可重复读取隔离级别时,确保在您的事务完成之前使用SELECT读取的行不会被修改。这似乎类似于SELECT .. FOR UPDATE提供的内容。因此,在使用可重复读取隔离级别时,使用SELECT FOR UPDATE的意义是什么?
也许出了些问题。当您在Repeatable Read下读取记录而不使用FOR UPDATE时,Mysql会使用Consistent Nonlocking Reads进行读取。它不会对其创建任何锁定。使用FOR UPDATE将创建写锁定。 不使用FOR UPDATE的可重复读取:从事务中第一次读取建立的快照中读取数据。使用FOR UPDATE:读取最新的快照。它可以读取已提交的最新数据。即使您使用可重复读隔离级别,它也会像“读取已提交”一样运行。 此外,如果您创建一个事务A并在其中的一行上使用FOR UPDATE。就像这样。BEGIN; select * from hero where id=3 for update ; 然后你创建另一个名为B的交易并进行简单读取。BEGIN; select * from hero where id=3 ; 交易B使用非锁定读取,不会检查行上是否存在写锁。它不会阻塞。