首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SELECT的用法是什么?用于使用可重复读取隔离时的更新?

SELECT的用法是什么?用于使用可重复读取隔离时的更新?
EN

Stack Overflow用户
提问于 2015-11-18 16:03:15
回答 2查看 2.7K关注 0票数 14

当使用可重复读取隔离时,可以保证在事务完成之前,使用SELECT读取的行不会被修改。

这似乎与选择的内容相似。更新报价。

那么,当使用可重复读取隔离时,使用SELECT FOR UPDATE有什么意义呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-19 05:38:22

当您在“可重复读取”下读取记录时,您将得到一个读锁,但其他事务也可以获得一个读锁,这可能会阻止您以后进行更新。使用FOR通知请求读取锁的任何其他事务,它们应该等待直到您完成更新记录。

票数 12
EN

Stack Overflow用户

发布于 2020-07-24 04:17:57

也许是出了什么问题。

在不使用UPDATE的情况下读取可重复读取的记录时,用一致非锁定读取读取Mysql。它不会在上面造成任何锁。

使用FOR UPDATE将创建写锁。

可重复读取,无需用于更新:从该事务中的第一次读取建立的快照读取数据。

用于更新:读取新快照。它可以读取提交的最新数据。即使您使用的是可重复的读隔离级别,它的行为也类似于“读取提交”。

此外,如果您创建了一个事务A,并使用它对一行进行更新。就像这样。

代码语言:javascript
运行
复制
BEGIN;
select * from hero where id=3 for update ;

然后创建另一个事务B并进行简单的读取。

代码语言:javascript
运行
复制
BEGIN;
select * from hero where id=3 ;

事务B使用非锁定读取,并且不会检查该行上是否存在写锁。它不会阻挡的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33784779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档