事务是为了实现数据的一致性和并发处理,你对数据进行定义和修改时就会产生事务。

例如你执行update语句,这时事务就开始了,执行commit会提交事务,而rollback会回滚(撤销)事务。

如果你什么也不做,那么正常退出程序时会自动提交,而程序异常中止则会回滚事务。

 

 

一、什么是事务
事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要们全部失败。
如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性。

比如支付宝转账,总共有两个事情要做: 1.一个人的钱多了,2.另一个人的钱少了

如果两个过程的其中任意一个环节出现错误就回到原来的状态,即事务回滚

 

 

一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACDI特性。

原子性:是指事物中包含的所有操作要么全做,要么全不做,也就是说事物的所有活动在数据库中要么全部反映,要么全部不反映,一保证数据时一致的。

一致性:是指数据库在事务操作前和操作处理,其中的数据必须都满足业务规定的约束。

隔离性:是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。

持久性:是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。

 

二、事务和锁
当执行事务操作时,Oracle会在被作用的表上加锁,防止其他用户改表。

三、提交事务
在执行使用commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁。当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据。

四、回退事务
在介绍回退事务前,我们先介绍一下保存点(savepoint)的概念和作用,保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。当执行rollback时,通过制定保存点可以回退到指定的点。
1、设置保存点
sql> savepoint a;
2、回滚部分事务
sql>rollback to a;
3、回滚全部事务
sql>rollback;

五、只读事务
只读事务是指只允许执行查询的操作,而不允许执行任何其他dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。
设置只读事务:
sql>set transaction read only;

 

 

一般情况下,通过执行commit或者rollback来终止事务,当执行commit语句时,自事务启动以来对数据库所做的一切的更改就成为永久性的了,即被写入磁盘,

而当执行rollback语句时,自数据库启动以来对数据库所做的一切的更改都会被撤销,并且数据库的内容返回到事务开始之前所处的状态。