在本章中,无涯教程将讨论PL/SQL中的事务,数据库事务是一个基本的工作单元,可能包含一个或多个相关的SQL语句。
开始&结束事务
事务具有beginning 和end 。发生以下事件之一时,事务beginning-
第一个SQL语句在连接到数据库后执行。
在事务完成后发出的每个新SQL语句中。
发生以下事件之一时,事务end-
发出 COMMIT 或 ROLLBACK 语句。
发出了 DDL 语句,如 CREATE TABLE 语句;因为在这种情况下会自动执行COMMIT。
发出了 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;
回滚事务
不使用COMMIT的情况下对数据库所做的更改可以使用ROLLBACK命令撤消。
ROLLBACK命令的一般语法是-
ROLLBACK [TO SAVEPOINT < savepoint_name>];
当事务由于某些前所未有的情况(如系统故障)而中止时,由于提交,整个事务将自动回滚,如果您没有使用 savepoint ,则只需使用以下语句回滚所有更改-
ROLLBACK;
Savepoints
保存点是一种标签,可通过设置一些检查点来帮助将长事务分成较小的单元,通过在长事务中设置保存点,可以根据需要回滚到检查点,这是通过发出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;
回滚到sav1 -此语句回滚所有更改,直到标签了保存点sav1为止。
自动事务控制
要在执行 INSERT,UPDATE 或 DELETE 命令时自动执行 COMMIT ,可以设置 AUTOCOMMIT 环境变量为-
SET AUTOCOMMIT ON;
您可以使用以下命令关闭自动提交模式-
SET AUTOCOMMIT OFF;