RR和RC使用场景
RR 可重复读,大事务中嵌套小事务,第一个小事务写数据后,后面的小事务不能读到同一个大事务下大上一个小事务的写入。
比如以最后一条数据修订数据为准时的情况,如一位老师对一位学生作业从开始到批改后改分的一个列表,会以最后的为准时,这种不太在意中间改动分数,只在意学生改完一版作业后的最后成绩,中间成绩是历史成绩,如果业务不需要记录,那更新学生成绩到最新的即可:
update student set score=#{currentScore} where s_id = 3;
RC 读提交,大事务中嵌套小事务,小事务每个都可以读到前一个事物的修改后的值。
比如在一个积分系统里,用户的积分是需要累加的,假如用户积分也是列表在外部传入到数据库后,每一个值其实都是重要的,
虽然可能只更改这一个用户的积分,但业务可能是类似要将上一个积分用于累计的形式:
update user set score=score+#{oneScore} where user_id = 3;
引用:
MySQL的RR需要gap lock来解决幻读问题。而RC隔离级别则是允许存在不可重复读和幻读的。所以RC的并发一般要好于RR;
RR隔离级别,通过 where 条件走非索引列过滤之后,即使不符合where条件的记录,也是会加行锁。所以从锁方面来看,RC的并发应该要好于RR;可以减少一部分锁竞争,减少死锁和锁超时的概率。
读提交(Read Committed)
- 数据库领域,事务隔离级别的一种,简称RC
- 它解决“读脏”问题,保证读取到的数据行都是已提交事务写入的
- 它可能存在“读幻影行”问题,同一个事务里,连续相同的read可能读到不同的结果集
可重复读(Repeated Read)
- 数据库领域,事务隔离级别的一种,简称RR
- 它不但解决“读脏”问题,还解决了“读幻影行”问题,同一个事务里,连续相同的read读到相同的结果集
RR下,大事务嵌套几个小事务,第一个小事务写操作提交后,后面的小事务不能读取到第一个小事务提交的内容;
RC下,大事务嵌套几个小事务,第一个小事务写操作提交后,后面的小事务可以读取到第一个小事务提交的内容;
作者:ukyo--碳水化合物
出处:https://www.cnblogs.com/ukzq/p/16669019.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2020-09-08 mysql ON DUPLICATE KEY UPDATE
2020-09-08 20200908 morning diary
2018-09-08 用户的注册登陆流程及代码实现
2017-09-08 最常用的15大Eclipse开发快捷键技巧【转】