重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1087|回复: 0
打印 上一主题 下一主题

事务隔离级别

[复制链接]
跳转到指定楼层
楼主
发表于 2022-11-27 22:09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
事务隔离级别

SQL标准考虑了并行事务间应避免的现象,定义了以下几种隔离级别,如表1-1所示。

表1-1 事务隔离级别
隔离级别
P0:脏写
P1:脏读
P2:不可重复读
P3:幻读
读未提交
不可能
可能
可能
可能
读已提交
不可能
不可能
可能
可能
可重复读
不可能
不可能
不可能
可能
可串行化
不可能
不可能
不可能
不可能

(1) 脏写(dirty write):两个事务分别写入,两个事务分别提交或回滚,则事务的结果无法确定,即一个事务可以回滚另一个事务的提交。
(2) 脏读(dirty read):一个事务可以读取另一个事务未提交的修改数据。
(3) 不可重复读(fuzzy read):一个事务重复读取前面读取过的数据,数据的结果被另外的事务修改。
(4) 幻读(phantom):一个事务重复执行范围查询,返回一组符合条件的数据,每次查询的结果集因为其他事务的修改发生改变(条数)。


在各类数据库实现的过程中,并发事务产生了一些新的现象,在原来的隔离级别的基础上,有了一些扩展。如表1-2所示。


隔离级别
P0:脏写
P1:脏读
P4:更新丢失
P2:不可重复读
P3:幻读
A5A:读偏斜
A5B:写偏斜
读未提交
不可能
可能
可能
可能
可能
可能
可能
读已提交
不可能
不可能
可能
可能
可能
可能
可能
可重复读
不可能
不可能
不可能
不可能
可能
不可能
不可能
快照一致性读
不可能
不可能
不可能
不可能
偶尔
不可能
可能
可串行化
不可能
不可能
不可能
不可能
不可能
不可能
不可能


(5) 更新丢失(lost update):一个事务在读取元组并更新该元组的过程中,有另一个事务修改了该元组的值,导致最终这次修改丢失。
(6) 读偏斜(read skew):假设数据x,y有隐式的约束x+y=100;事务一读取x=50;事务二写x=25并更新y=75保证约束成立,事务二提交,事务一再读取y=75,导致事务一中读取x+y=125,不满足约束。
(7) 写偏斜(write skew):假设数据x,y有隐式的约束x+y<=100;事务一读取x=50,并写入y=50;事务二读取y=30并写入x=70,并提交;事务一再提交;最终导致x=70,y=50不满足x+y<=100的约束。



  openGauss提供读已提交隔离级别和可重复读隔离级别:在实现上可重复读隔离级别无幻读问题,有A5B写偏斜问题。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-28 15:25 , Processed in 0.133303 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表