18、oracle数据库事物


18.1、事物介绍:

1、事物是由一组dml语句和commit/rollback组成,是改变数据库最小的逻辑单元,如commit,表示数据入库,

如果是rollback,表示取消所有的dml操作;

2、事物结束commit、rollback、ddl语句自动提交commit;

3、事物的开始是上一个事物的结束就是下一个事物的开始;

4、oracle必须要提交不然数据不会进库;

5、事物的特性:

(1)原子性(Atomicity):事务中所涉及的程序对数据库的修改操作要么全部成功,要么全部失败;

(2)一致性(Consistency):事务执行前和执行后来源和去向保持平衡;

(3)隔离性(Isolation):并发时每个事务是隔离的,相互不影响;

(4)持久性(Durubility):一旦事务成功提交,应该保证数据的完整存在;


18.2、ORACLE数据库事务隔离级别:

1、事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度;

2、两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

(1)脏读:事务A读取了事务B更新未提交的数据,然后B回滚操作,那么A读取到的数据是脏数据;

(2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致;

(3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录并提交,

当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读;

(4)小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除,解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表;

3、为了解决oracle数据库事物并发所出现的问题,设置了如下的事物级别:

(1)级别越高,并发性越差:

(2)Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别,所以Oracle不支持脏读;

(3)SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED;

(4)设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ COMMITTED|SERIALIZABLE]

(5)例如:当设置数据库的隔离级别为READ COMMITTED的时候,假如现在存在两个事务T1和T2,现在T1向数据库添加了一条

数据但事务未提交,那么T2此时就不能访问T1所改变的内容。只有事务T1提交后,T2才能看到数据库的改变。相当于T1提交事务

之前,对所改变的数据加了锁,其他事务无法看到!


18.3、锁:

1、排它锁(x锁):

当有DML语句执行的时候,设计的行都会加上排它锁,其他事物不能进行修改,直到commit或rollback释放它;

2、共享锁(s锁):

加了共享锁的数据,可以被其他事物读取,但不能修改;

3、表上加共享锁s,行上加排他x锁;

ATM:automatic teller machine


18.4、事物不提交的后果:

1、其它事物看不见他的操作,自己可以看到;

2、表和行上加的锁不会释放,会阻塞其它的事物操作;

3、它所操作的数据可以恢复到之前的状态;












posted @   云起时。  阅读(171)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示
主题色彩