在本章中,我們將討論和學習PL/SQL中的事務。 資料庫事務是由一個或多個相關SQL語句組成的原子工作單元。它被稱為原子操作,因為構成事務的SQL語句帶來的資料庫修改可以共同提交,即永久化到資料庫或從資料庫回滾(復原)。
成功執行的SQL語句和提交的事務不一樣。即使成功執行SQL語句,除非提交包含語句的事務,否則可以回滾該語句,並且可以撤消語句所做的所有更改。
事務有開始和結束。當發生以下事件之一時,事務即開始 -
事務在下列事件之一發生時結束 -
COMMIT
或ROLLBACK
語句。CREATE TABLE
語句; 因為在這種情況下,自動執行COMMIT
。DCL
語句,如:GRANT
宣告; 因為在這種情況下,自動執行COMMIT
。EXIT
命令從SQL * PLUS退出,COMMIT
自動執行。ROLLBACK
。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;
儲存點(Savepoints
)是有助於通過設定一些檢查點將長事務拆分成更小的單元的標記。通過在長事務中設定儲存點,如果需要,可以回滾到檢查點。這是通過發出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
- 此語句回滾直到儲存點sav1
的所有更改。
之後,所做新的改變將重新開始。
要在執行INSERT
,UPDATE
或DELETE
命令時自動執行COMMIT
,可以將AUTOCOMMIT
環境變數設定為 -
SET AUTOCOMMIT ON;
也可以使用以下命令關閉事務自動提交模式 -
SET AUTOCOMMIT OFF;