【IT168 服务器学院】事务控制
事务控制包括协调对相同数据的多个同步的访问。当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据。
事务 事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句。在SQL和PL/SQL中有很多语句让程序员控制事务。程序员可以:
1、显式开始一个事物,选择语句级一致性或事务级一致性
2、设置撤销回滚点,并回滚到回滚点
3、完成事务永远改变数据或者放弃修改。
事务控制语句
语句 |
用途 |
Commit |
完成事务,数据修改成功并对其他用户开放 |
Rollback |
撤销事务,撤销所有操作 |
rollback to savepoint |
撤销在设置的回滚点以后的操作 |
set transaction |
响应事务或语句的一致性;特别对于事务使用回滚段 |
例:
BEGIN UPDATE checking SET balance=balance-5000 WHERE account=''Kieesha'';
INSERT INTO checking_log(action_date,action,amount) VALUES (SYSDATE,''Transfer to brokerage'',-5000);
UPDATE brokerage SET cash_balance=cash_balance+5000 WHERE account=''Kiesha'';
INSERT INTO brokerage_log(action_date,action,amount) VALUES (SYSDATE,''Tracfer from checking'',5000)
COMMIT
EXCEPTION WHEN OTHERS ROLLBACK
END |
Savepoint 和 部分回滚(Partial Rollback) 在SQL和PL/SQL中Savepoint是在一事务范围内的中间标志。经常用于将一个长的事务划分为小的部分。保留点Savepoint可标志长事务中的任何点,允许可回滚该点之后的操作。在应用程序中经常使用Savepoint;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个Savepoint之后,该Savepoint之后所获得的数据封锁被释放。为了实现部分回滚可以用带TO Savepoint子句的ROLLBACK语句将事务回滚到指定的位置。
例
BEGIN
INSERT INTO ATM_LOG(who,when,what,where) VALUES (''Kiesha'',SYSDATE,''Withdrawal of $100'',''ATM54'') SAVEPOINT ATM_LOGGED;
UPDATE checking SET balance=balance-100 RETURN balance INTO new_balance;
IF new_balance<0 THEN ROLLBACK TO ATM_LOGGED; COMMIT RAISE insufficient_funda; END IF
END
|
关键字SAVEPOINT是可选的,所以下面两个语句是等价的:
ROLLBACK TO ATM_LOGGED; ROLLBACK TO SAVEPOINT ATM_LOGGED; |