开发手册 欢迎您!
软件开发者资料库

PL / SQL - 事务

PL / SQL事务 - 从PL / SQL语法,环境设置,操作员,事务,日期和时间,数据类型,变量,常量,记录,条件语句,迭代语句,游标开始,简单易学地学习PL / SQL编程,过程,函数,异常处理,触发器,包,集合,外部过程,数组,字符串,dbms输出。

在本章中,我们将讨论PL/SQL中的事务.数据库事务是一个原子工作单元,可能包含一个或多个相关的SQL语句.它被称为原子,因为构成事务的SQL语句所带来的数据库修改可以共同提交,即永久保存到数据库或从数据库回滚(撤消).

成功执行的SQL语句和已提交的事务不相同.即使成功执行了SQL语句,除非提交包含该语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改.

启动和结束交易

交易有开头结束.当下列事件之一发生并且减去时,事务开始;

  • 连接到数据库后执行第一个SQL语句.

  • 在交易完成后发布的每个新SQL语句.

当下列事件之一发生并且减去时,交易结束;

  • A COMMIT ROLLBACK 语句.

  • A DDL 语句,例如发布CREATE TABLE 语句;因为在这种情况下会自动执行COMMIT.

  • A DCL 语句,例如 GRANT 声明,已发布;因为在这种情况下会自动执行COMMIT.

  • 用户断开与数据库的连接.

  • 用户通过发出 EXIT 命令退出 SQL * PLUS ,自动执行COMMIT.

  • SQL * Plus异常终止,自动执行 ROLLBACK .

  • DML 语句失败;在这种情况下,会自动执行ROLLBACK以撤消该DML语句.

提交交易

通过发出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命令可以撤消对没有COMMIT的数据库所做的更改.

ROLLBACK命令的一般语法是 :

ROLLBACK [TO SAVEPOINT< savepoint_name>];

当事务因某些前所未有的情况(例如系统故障)而中止时,自提交以来的整个事务将自动回滚.如果您没有使用 savepoint ,那么只需使用以下语句回滚所有更改 :

ROLLBACK;

保存点

保存点是一种标记,有助于通过设置一些检查点将长事务拆分为更小的单位.通过在长事务中设置保存点,您可以根据需要回滚到检查点.这是通过发出 SAVEPOINT 命令来完成的.

SAVEPOINT命令的一般语法是 :

SAVEPOINT < savepoint_name >;

例如

INSERT 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 : 此语句将所有更改回滚到您已标记为savepoint sav1的位置.

之后,您所做的新更改将开始.

自动交易控制

每当 INSERT,UPDATE 删除时自动执行 COMMIT 执行命令后,可以将 AUTOCOMMIT 环境变量设置为 :

SET AUTOCOMMIT ON;

您可以使用以下命令关闭自动提交模式 :

SET AUTOCOMMIT OFF;