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

标题: 事务隔离级别 [打印本页]

作者: 郑全    时间: 2022-11-27 22:09
标题: 事务隔离级别
事务隔离级别

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写偏斜问题。









欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2