Oracle数据库事务讲解教程
(1)数据库事务解释
事务: 在数据库中事务是工作的逻辑单元,一个事务由一个或多个完成相关行为的SQL语句组成,通过事务机制保证这一组SQL语句所做的操作要么全部执行执行成功,要不全部不执行。
(2)事务的ACID特性
- 原子性(Atomicity):事务的原子性是指事务中的所有SQL语句是一个整体,SQL语句所做的操作要么全部执行成功,要不全部不执行,保证数据的一致性
- 一致性(Consistency);数据库的数据在事务处理前和事务处理后,其中数据必须满足业务的规则约束
- 隔离性(Isolation):数据库允许多个并发的事务对其中的数据进行读写或修改的能力,隔离性可以防止多个事务并发执行时,由于它们的操作命令交叉执行而导致数据不一致
- 持久性(Durability):事务一旦成功提交,对数据库的修改就是永久性的。
(3)事务的作用:用于保证数据库数据的一致性
(4)事务分类
1)显式事务:
1-1)显式提交:commit
以成功的方式结束事务,组成事务的DML语句全部生效**
1-2)显式回滚:rollback
以失败的方式结束事务,组成事务的DML语句全部取消**
1-3)保存点:savepoint
2)隐式事务:
2-1)隐式提交:当下列任意一种情况发生时,会发生隐式提交
2-1-1)执行一个DDL(create,alter,drop,truncate,rename)语句;
2-1-2)执行一个DCL(grant,revoke)语句;
2-1-3)从SQL Plus正常退出(使用exit或quit命令退出)
2-2)隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
2-2-1)从SQL Plus中强制退出
2-2-2)客户端连接到服务器端异常中断
2-2-3)系统崩溃
(5)事务的开始和结束:
事务开始:
事务自动开启于上一个事务结束后第一个执行的DML语句
事务结束:
显式结束:事务在遇到commit或者rollback时结束
隐式结束:执行隐式事务时会自动结束事务
(6)设置保存点:
如果在一个事物内,想要回滚到指定的位置,不是回滚到事务的起始点,可以通过保存点实现
savepoint sp:--定义一个保存点语句
rollback to sp:--回滚到指定保存点
以上两条语句不结束事务的执行。
(7)事务隔离级别
针对读取数据时可能产生的不一致现象,SQL92标准定义了4个事务的隔离级别
- Read uncommitted(读未提交),可能会导致脏读、不可重复读和幻读,是语句级别的隔离
- Read committed(读提交),不会脏读,可能会不可重复读和幻读,是语句级别的隔离
- Repeatable read(可重复读),不会脏读和不可重复读,可能会幻读,是事务级别的隔离
- Serializable(串行读),不会脏读、不可重复读和幻读,是事务级别的隔离
Oracle默认的隔离级别是read committed。
Oracle支持上述四种隔离级别中的两种:read committed 和serializable。除此之外,Oralce中还定义Read only和Read write隔离级别。
Read only:事务中不能有任何修改数据库中数据的操作语句,是Serializable的一个子集。
Read write:它是默认设置,该选项表示在事务中可以有访问语句、修改语句,但不经常使用。