ORACLE —— 事务

本文详细介绍了Oracle数据库中的事务概念,包括事务的ACID特性、数据异常类型(脏读、不可重复读、幻读)、隔离级别及其对数据一致性的影响。重点讨论了Oracle支持的读已提交和串行两种隔离级别,并通过实例展示了它们在事务处理中的行为差异。
摘要由CSDN通过智能技术生成

什么是事务?

在数据库中,事务是工作的逻辑单元。一个事务可以是一个SQL语句,也可以是多个完成一系列操作的SQL语句。事务机制是确保这些SQL语句要么全部成功执行,完成整个逻辑单元,要么一条也不执行。

事务特性(ACID)

  • 原子性(atomicity):一个事务中所包含的SQL语句是一个整体,要么全部执行,要么全部不执行;
  • 一致性(consistency):事务开始前,数据是一致的(注:一致性的,是指符合业务逻辑),事务结束后,数据要保持一致;
  • 隔离性(isolation):数据库允许多个事务同时开始,对数据进行读写或更新。事务并发执行,交叉执行,可能会导致数据不一致。事务隔离性就是为了避免这种问题。
  • 持久性(duribility):事务结束后,它对数据的影响是永久的,无论遇到什么情况,数据都不会丢失。

数据异常

  • 脏读:A事务先修改了数据,B事务立即读取了该数据,但是由于某种原因,A事务又撤销了修改动作(注意:A事务没有提交事务,所以能够撤销操作),数据回到原来状态。那么B事务读取的数据跟库中的不一样,就叫脏读。
  • 不可重复度:A事务先读取了一条数据之后,B事务紧跟着修改了该数据,并且提交了,A事务再去读,读到的是B事务修改之后的,跟第一次读到的不一样,就叫不可重复读。简而言之,一个事务两次读到的数据不一样。
  • 幻读:A事务根据某个条件读了一条数据之后,B事务给表中插入一条,并且满足A事务读取的条件,A事务再以同样的条件去读,返回了两条记录,就叫幻读。(一条,两条都是打个比方,就是不同的行。)
    注:
    脏读和不可重复读的区别: 脏读是读到了未提交的数据,不可重复读是读到了前一个事务提交的修改的数据;
    不可重复读和幻读的区别: 不可重复读和幻读都是读到了前一个事物提交的数据,不同点在于,不可重复读的判断标准:就数据而言,是表中的某一行,就操作而言,是UPDATE;幻读的判断标准,就数据而言,是整张表的某一批数据,就操作而言,是INSERT。(很重要)

隔离级别

读未提交(Read UnCommmint):最低级别,无法避免任何数据异常。
读已提交(Read Commint):可避免脏读。
可重复读(Repeatable Read):可避免脏读、不可重复读。
串行(Serializable):可避免脏读、不可重复读、幻读。

ORACLE支持的事务

  1. 读已提交
  2. 串行

开始事务

ORACLE开始事务都是隐式的,当连接到数据库、执行每个DDL、DML、DCL语句,ORACLE都会自动开启事务。

结束事务

执行COMMIT、ROLLBACK,当前事务就会结束,如以下情况:

  • 断开/退出数据库连接,ORACLE自动执行COMMIT;
  • 执行DDL、DCL语句,ORACLE自动执行COMMIT;
  • SQL*PLUS,用户输入EXIT命令,ORACLE自动执行COMMIT;
  • 进程意外终止,ORACLE自动执行ROLLBACK;
  • SQL*PLUS,意外终止,ORACLE自动执行ROLLBACK;
  • DML语句执行成功,用户手动执行COMMIT、ROLLBACK;
  • DML语句执行失败,ORACLE自动执行ROLLBACK;

显式事务、隐式事务

显式事务:用户手动执行COMMIT、ROLLBACK;
隐式事务:ORACLE系统自动执行COMMIT、ROLLBACK;

事务控制语句

COMMINT:提交事务,持久保存对数据库的操作;
ROLLBACK:回滚事务,取消对数据库的任何操作;
SAVEPOINT:保存点,在事务某个状态设置一个点,回滚时可以回滚到这个特定的点,而不是将整个事务撤销;
SET TRANSACTION:设置事务属性,值如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值