当使用可重复读取隔离时,可以保证在事务完成之前,使用SELECT读取的行不会被修改。
这似乎与选择的内容相似。更新报价。
那么,当使用可重复读取隔离时,使用SELECT FOR UPDATE有什么意义呢?
发布于 2015-11-19 05:38:22
当您在“可重复读取”下读取记录时,您将得到一个读锁,但其他事务也可以获得一个读锁,这可能会阻止您以后进行更新。使用FOR通知请求读取锁的任何其他事务,它们应该等待直到您完成更新记录。
发布于 2020-07-24 04:17:57
也许是出了什么问题。
在不使用UPDATE的情况下读取可重复读取的记录时,用一致非锁定读取读取Mysql。它不会在上面造成任何锁。
使用FOR UPDATE将创建写锁。
可重复读取,无需用于更新:从该事务中的第一次读取建立的快照读取数据。
用于更新:读取新快照。它可以读取提交的最新数据。即使您使用的是可重复的读隔离级别,它的行为也类似于“读取提交”。
此外,如果您创建了一个事务A,并使用它对一行进行更新。就像这样。
BEGIN;
select * from hero where id=3 for update ;然后创建另一个事务B并进行简单的读取。
BEGIN;
select * from hero where id=3 ;事务B使用非锁定读取,并且不会检查该行上是否存在写锁。它不会阻挡的。
https://stackoverflow.com/questions/33784779
复制相似问题