首页 > 代码库 > (十五)PL/SQL事务

(十五)PL/SQL事务

数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成。所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消)回滚。
一个成功执行的SQL语句和提交的事务不一样。即使一个SQL语句执行成功,除非包含该语句的事务被提交,但也可以回滚和声明(S)的所有更改可以撤消。


一、开始事务
事务都有开始和结束。事务开始时有下列事件之一:
   连接到数据库后执行的第一个SQL语句。
   在事务完成之后发出每一个新的SQL语句完成。


 
二、提交事务
事务是通过发出SQL命令COMMIT永久生效。COMMIT命令的一般语法是:
  COMMIT;

示例,
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, ‘Ramesh‘, 32, ‘Ahmedabad‘, 2000.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (2, ‘Khilan‘, 25, ‘Delhi‘, 1500.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (3, ‘kaushik‘, 23, ‘Kota‘, 2000.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (4, ‘Chaitali‘, 25, ‘Mumbai‘, 6500.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (5, ‘Hardik‘, 27, ‘Bhopal‘, 8500.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (6, ‘Komal‘, 22, ‘MP‘, 4500.00 );
  COMMIT;


三、回滚事务
对数据库所做的不提交更改可以使用ROLLBACK命令撤消。
ROLLBACK命令的一般语法是:
  ROLLBACK [TO SAVEPOINT < saveyiibai_name>];
当一个事务因一些前所未有的情况中止,如系统故障,则整个事务由于提交自动回滚。如果不使用保存点,然后简单地使用下面的语句来回滚所有的变化:
ROLLBACK; 
 


四、保存点
保存点是某种标志,帮助分裂一个长事务分成更小的单位设置了一些检查点。由一个长事务中设置保存点,可以根据需要回滚到一个检查点。这是通过发出SAVEPOINT命令来完成。  
保存点命令的一般语法是:
  SAVEPOINT < saveyiibai_name >;

示例:
I  NSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (7, ‘Rajnish‘, 27, ‘HP‘, 9500.00 );
  INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)VALUES (8, ‘Riddhi‘, 21, ‘WB‘, 4500.00 );
  SAVEPOINT sav1;

  UPDATE CUSTOMERS SET SALARY = SALARY + 1000;
  ROLLBACK TO sav1;

  UPDATE CUSTOMERS SET SALARY = SALARY + 1000 WHERE ID = 7;
  UPDATE CUSTOMERS SET SALARY = SALARY + 1000 WHERE ID = 8;
  COMMIT;
在这里,ROLLBACK TO sav1; 声明回滚变化到一点,在那里标志着保存点sav1,之后将开始新的变化。

 


 
五、结束事务
事务结束时的下列事件之一发生:
  COMMIT或发出ROLLBACK语句。
  DDL语句,如CREATE TABLE语句,则发出;因为在这种情况下,COMMIT被自动执行。
  一个DCL语句,比如一个GRANT语句发出; 因为在这种情况下,COMMIT被自动执行。
  用户从数据库断开。
  从SQL* PLUS用户退出通过发出EXIT指令,COMMIT自动执行。
  SQL* Plus异常终止,自动执行ROLLBACK。
  一个DML语句失败; 在这种情况下自动执行撤消DML语句ROLLBACK。

 

六、自动事务控制
要执行一个自动COMMIT在每一个INSERT,UPDATE或DELETE命令执行时,可以设置AUTOCOMMIT环境变量:
  SET AUTOCOMMIT ON;
可以关闭使用以下命令自动提交模式:
  SET AUTOCOMMIT OFF;

(十五)PL/SQL事务