脏读:事务读取到了其他事务修改,但是未提交的行,就叫做脏读。不可重复读(模糊读):事务读取之前曾经读取到的数据,发现该数据已经被另一个已经提交的事务修改或者删除了,就叫做不可重复读。幻读:事务运行满足某个搜索条件的查询,发现另一个已提交的事务已经插入了满足条件的其他的行。 举例:表user (id int)记录 1 2 3 4 5事务A: select * from user; select * from user; commit; 事务B: delete from user where id=3; commit; 事务C: update user set id=100 where id=1; commit; 事务D: insert into user values (6); commit; 场景1: 事务C已经执行,但还未提交,此时事务A的select * from user语句查出来的结果中存在100的记录而不存在1的记录,就是脏读。 场景2: 事务A执行第一个select语句查询到12345,此时事务B执行了并提交了,事务A的第二个select语句查询出来结果只剩下1245,和之前不一致,就是不可重复读。 场景3: 事务A执行了第一个select语句查到12345,此时事务D执行了并提交了,事务A的第二个select语句查询到的是123456 ,和之前不一致,就是幻读。 ORACLE提供的隔离级别: 读提交隔离级别( Read Committed Isolation Level): 此隔离级别事务只读取到查询开始之前已经提交的事务,只保证查询过程中的数据读一致性,就是事务内多个查询可能会读取到不一致的数据,可能会遇到不可重复读和幻读。 在读提交隔离级别,若是事务A、B修改相同的行,事务A先修改获得行锁,则B事务会等待A事务提交,但A事务提交后B事务会接着执行,此时A事务对该记录的更新就丢失了。 可串行化隔离级别( Serializable Isolation Level): 此隔离级别事务只读取到事务开始之前已经提交的事务, 保证整个植物过程中的数据读一致性,不会遇到脏读、 不可重复读和幻读。 在 可串行化隔离级别, 若是事务A、B修改相同的行,事务A先修改获得行锁,则B事务会等待A事务提交,A事务提交后,B事务执行对该行的修改,发现该记录在B事务开始后被其他事务修改并提交过,此时数据库会报错, ORA-08177: Cannot serialize access for this transaction 只读隔离级别( Read-Only Isolation Level): 只读隔离级别的事务和可串行化隔离级别类似,但不允许修改数据,一般用来生成报表。
[ORACLE] 脏读、不可重复读、幻读和隔离级别
来源:这里教程网
时间:2026-03-03 16:34:47
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle 19C 触发的ORA-04031BUG
oracle 19C 触发的ORA-04031BUG
26-03-03 - 数据库控制文件高达100多G
数据库控制文件高达100多G
26-03-03 - Oracle 某行系统SQL优化案例(一)
Oracle 某行系统SQL优化案例(一)
26-03-03 - Oracle运行监控工具Spotlight使用测试
Oracle运行监控工具Spotlight使用测试
26-03-03 - 视频竖屏改横屏,用什么剪辑工具,批量改变视频的横竖屏比较快
视频竖屏改横屏,用什么剪辑工具,批量改变视频的横竖屏比较快
26-03-03 - 【DBA】数据库工程师DBA技能图谱
【DBA】数据库工程师DBA技能图谱
26-03-03 - [BBED]断电异常后修复Oracle数据文件(ORA-00702: bootstrap verison)
- redo损坏修复启动数据库办法
redo损坏修复启动数据库办法
26-03-03 - 【Oracle体系结构】 Oracle19C 系统结构介绍
【Oracle体系结构】 Oracle19C 系统结构介绍
26-03-03 - 多个百世快递的物流怎么批量查询的,怎样利用快递批量查询
多个百世快递的物流怎么批量查询的,怎样利用快递批量查询
26-03-03
