在本章中,我們將討論和學習PL/SQL中的事務。 資料庫事務是由一個或多個相關SQL語句組成的原子工作單元。它被稱為原子操作,因為構成事務的SQL語句帶來的資料庫修改可以共同提交,即永久化到資料庫或從資料庫回滾(撤銷)。
成功執行的SQL語句和提交的事務不一樣。即使成功執行SQL語句,除非提交包含語句的事務,否則可以回滾該語句,並且可以撤銷語句所做的所有更改。
開始和結束事務
事務有開始和結束。當發生以下事件之一時,事務即開始 -
- 連接到資料庫後執行第一個SQL語句。
- 在事務完成後發出的每個新的SQL語句。
事務在下列事件之一發生時結束 -
- 發出了
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;
回滾事務
使用ROLLBACK
命令可以撤銷對不帶COMMIT
的資料庫所做的更改。
ROLLBACK
命令的一般語法是 -
ROLLBACK [TO SAVEPOINT < savepoint_name>];
當事務由於某種前所未有的情況而中止,如系統故障時,自提交以來整個事務被自動回滾。 如果不使用保存點(savepoint
),那麼只需使用以下語句來回滾所有更改。
ROLLBACK;
保存點 - Savepoints
保存點(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;
上一篇:
PL/SQL集合
下一篇:
PL/SQL日期及時間