数据库 一致性读当前读
今天小伙伴问了一个sql的问题:
update t set status=2 where id in(select id from t where status=1)
这个sql,在并发的情况下,会不会有问题?
假设:下面的讨论,数据库的事务隔离级别是read_committed
其实这个可以很容易测试一下,得出结论:存在丢失更新的问题。
先来理解两个概念:
1. 一致性读
当前的数据库产品级别都实现了多版本一致性,即MVCC,那么有了MVCC,数据库实现了读写互不阻塞的效果。
但为了达到read_committed事务隔离级别,以及语句级的读一致性,select语句需要构建一个版本,数据库会根据一个版本号,来构建。
比如oracle使用scn号,为了构建这个版本,产生的读,称为一致性读。
2. 当前读
数据库在写入的过程中,比如update,因为要验证constraint,冲突等,需要读到当前数据,包括没有commit的事务,这样就产生了当前读。
oracle中英文解释:
一致性读: Consistent read
当前读: Current read
而上面的这个语句,就存在了两种读取。
select: 会进行一致性读,
update:会进行当前读。
而在并发的情况下: 第二个update可能因为更新到同一行(其他更新本行的事务未提交),而被阻塞。
当另一个事务提交后,第二个update会再次构建当前读,会把status从2再次更新成2.
如何避免:
1. 更改语句:
update t set status=2 where id in(select id from t where status=1) and status=1;
2. 调整事务的隔离级别
转载于:https://www.cnblogs.com/xpchild/p/3798195.html
数据库 一致性读当前读相关推荐
- Oracle 物理读 逻辑读 一致性读 当前模式读总结浅析
Oracle 物理读 逻辑读 一致性读 当前模式读总结浅析 在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get ...
- Mysql-InnoDB 事务-一致性读(快照读)
数据库读,是数据库操作中很常见的一个操作,在数据库事务中也经常出现读取数据的操作,比如先读取是否存在,然后不存在就插入等,想要了解数据库事务,理解"读"这个操作必不可少. 数据库读 ...
- mysql 虚读幻读区别,数据库基础知识
MySQL事务 MySQL事务是访问并更新数据库中各种数据项的一个程序执行单元.在事务中的操作,要么都执行修改,要么都不执行,这就是事务的目的,也是事务模型区别于文件系统的重要特征之一. 作用:维护数 ...
- MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别
目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...
- mysql 快照读 幻读,InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读...
InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,只解决了快照读情况下的幻读问题,当前读情况下解决幻读问题得靠next-key锁. mysql如何实现避免幻读: 在快照读读情况下 ...
- 分布式mysql一致性问题_分布式缓存数据库一致性问题
缓存和数据库一致性问题,有很多解决方案,没有最完美的方案,只有适合自身业务的尽可能完美的方案. 缓存由于其高并发和高性能的特征,已经在项目中被广泛应用. 查询时一般先查询缓存,如果缓存命中的话,那么直 ...
- 好文推荐 | 缓存与数据库一致性问题深度剖析 (修订)
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:后端技术漫谈 当我们在做数据库与缓存数据同步时,究竟更新缓存,还是删 ...
- 缓存和数据库一致性问题,看这篇就够了
作者 | Magic Kaito 来源 | 水滴与银弹 如何保证缓存和数据库一致性,这是一个老生常谈的话题了. 但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存? 到底选择先更新数据库, ...
- Redis 缓存实战——缓存、数据库一致性问题分析与解决方案
引言 缓存与数据库一致性的问题自从出现了缓存概念后就一直被提及,它是一个缓存方案的先天缺陷,只要存在缓存,就势必会讨论缓存与数据库一致性的问题. 一致性问题还广泛存在于各种分布式存储场景中,如主从一致 ...
- 故障分析:数据库一致性关闭缓慢问题诊断
想必我们大家都知道,Shutdown immediate即一致性关闭数据库,数据库下次启动不需要做实例恢复即可open数据库.那么当数据库一致性关闭出现缓慢等状况时,该怎么办呢?那我们就来一起分析一下 ...
最新文章
- python刷题笔记怎么改_python面试题刷题笔记1 - 10
- windows系统下批量修改文件后缀
- 【PAT乙级】1063 计算谱半径 (20 分)
- fzu - Problem 1759 Super A^B mod C
- tensorflow随笔 -QueueRunner
- java蛮力法背包问题_[算法课]五种蛮力法解决01背包问题
- 媒体转码切片_cVideo云转码系统
- ping不同的网卡方法
- python参考手册下载_python3.8.4官方中文文档 API手册 PDF 高质量版
- python培训班靠谱吗-天津靠谱的python培训班
- 国外的一些开源网站汇集以及优秀博客的博客(非 CSDN的博客)
- Scoop包管理工具
- java kdj_基于java语言开发的个性化股票分析技术:随机指数(kdj).doc
- 计网复习day01 2020.8.18
- 赫赫有名的杰克·韦尔奇作为通用电气的CEO而享誉全球,他的管理特点就浓缩在这些言语之中,大家可以带着这些观点去读读他的自传和《赢》,吐血推荐哈。
- 获取手机联系人,并通过拼音字母快速查询
- 智能手机CPU大揭秘
- 托盘图标在资源管理器退出重启后图标消失(应用程序进程依然存在)的问题
- c# 多种方法调整屏幕亮度
- windows10本地部署PHP
热门文章
- 为什么个体户做不大?
- 我哥以前是做小本生意的,一年花销除外能存个十二万的样子
- 员工为什么缺乏执行力?
- 你根本就不需要认识这么多大佬
- 现代汇编教材还是基于8086,对理解当今CPU(如i9)有帮助吗,还是教程太滞后?
- sql server 内存_SQL Server内存性能指标–第3部分– SQL Server Buffer Manager指标和内存计数器
- 将PowerShell连接到SQL Server –使用其他帐户
- 单包攻击_SQL Server Integration Services 2016中的单包部署
- Python学习教程:Python3内置模块之base64编解码方法小结
- 1.yum下载 mysql及授权