1、Oracle事务处理
事务用于确保数据库数据的一致性,事务处理和锁是两个紧密联系的概念。
事务就是一个单元的工作,包括一系列的操作,这些操作要么全部提交成功,要么全部提交失败。
事务确保多个数据的操作作为一个事务单元来处理。
举个例子:
假定某一客户需要将自己银行卡里的钱全部转移给另一客户。
这里要执行两个操作,分别是:
减少这一客户银行卡里的钱,增加另一客户银行卡里的钱。
为了确保数据库一致,这两个操作必须全部成功,或者全部取消。
Oracle通过事务机制管理多个事务,确保事务的一致性。
锁定机制可以有效防止其他用户的修改另外一个还没有完成的事务中的数据。
2、事务处理技术
事务用于确保数据库的一致性,它由一组相关的DML语句组成。
注意:在Oracle中没有“开始事务处理”语句。
用户不能显示的开始一个事务处理。事务处理会隐式的开始于第一条修改数据的语句,或者在一些要求事务处理的场合。
数据库事务主要由INSERT、UPDATE、DELETE、SELECT......FOR UPDATE等语句组成。
当应用程序执行第一条SQL语句时,事务就开始了,当执行COMMIT或ROLLBACK语句时结束。
Oracle中对事务处理的控制语句主要包括COMMIT、ROLLBACK、SAVEPOINT、ROLLBACK TO SAVEPOINT、
SET TRANSACTION和SET CONSTRAINTS。
3、提交事务
在事务处理中,用户只需用使用COMMIT语句就可以结束事务。
当执行COOMIT语句之后,系统确认事务变化、结束事务、删除保存点、释放锁,其他的会话就可以查看到事务变化后的数据了。
例子:
SQL>UPDATE scott.emp SET SAL=2000 WHERE ENAME='MARY';
SQL>COMMIT;
SQL>SELECT SAL FROM scott.emp WHERE ENAME='MARY';
结果;
SAL
----------------
2000
4、回退事务
回退就是可以撤销已经进行的操作。
当应用中出现错误,或者说运行程序的终端时,用户决定不保存对数据所进行的修改时,就需要进行回滚操作。
回滚事务使用ROLLBACK命令。
例子:
SQL>UPDATE scott.emp SET SAL=3000 WHERE ENAME='MARY';
SQL>COMMIT;
SQL>SELECT SAL FROM scott.emp WHERE ENAME='MARY';
结果;
SAL
----------------
2000
设置保存点:
保存点顾名思义就是一个保存的位置。
作用:可以让用户将单独的大规模事务处理分割成一系列较小的部分,用户可以将特定的语句组织到一起,将其作为单独的语句进行回滚。
事务处理中,其他以前的语句不会受到影响。
设置保存点是使用SQL命名SAVEPOINT来完成的,也可使用包DBMS_TRANSCTION的过程SAVEPOINT来设置保存点。
例子:
SQL>SAVEPOINT A;
或者
SQL>EXEC DBMS_TRANSCTION.SAVEPOINT('A');
取消部分事务
为了取消部分的事务,用户可以退回到保存点。回退到保存点既可以使用ROLLBACK命名,也可以适用包DBMS_TRANSCTION的过程
ROLLBACK_SAVEPOINT.
例子:
SQL>ROLLBACK TO A;
或者
SQL>EXEC DBMS_TRANSCTION.ROLLBACK_SAVEPOINT('A');
取消全部事务
ROLLBACK命名可以取消全部事务。
例子:
SQL>ROLLBACK;
或者
SQL>EXEC DBMS_TRANSCTION.ROLLBACK('A');
注意:当时用ROLLBACK命令取消全部的事务时,会同时取消所有的事务变化、结束事务、删除所有保存点并且释放锁。
5、事务的ACID属性
数据库的事务具有ACID属性。ACID是指原子性(actomicity)、一致性(consistency)、隔离性(isolation)、持久性(durabilily)。
这一特性描述了事务处理的规则。
原子性
这一特性表示事务处理要么全部进行,要么全部撤销。
一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,导致事务不能完成它的全部事务,系统将返回到事务开始前的状态。
一致性
这一特性表示事务处理要将数据库从一种状态转变为另一种状态。
事务一致保证系统的任何事务最后都处于有效状态。
事务成功完成,系统中所有变化将正确应用,系统处于有效状态。
事务出错,系统中所有变化将自动回滚,系统返回原始状态。
由于事务开始时系统处于一致状态,所以事务出错后,自动回滚后仍然处于一致状态。
隔离性
这一特性表示在事务处理提交之前,事务处理的效果不能由系统中其他事务处理看到。
在隔离状态下执行事务,如果有两个事务,在同一时间内·运行,执行相同的功能,事务的隔离性将确保每一事务在系统中的唯一性。
持久性
这一特性表示一旦提交事务处理,它就永久生效。意味着一旦事务执行成功,在系统中·锁产生的所有变化将是永久的。