
- PL/SQL 教程
- PL/SQL - 首頁
- PL/SQL - 概述
- PL/SQL - 環境
- PL/SQL - 基本語法
- PL/SQL - 資料型別
- PL/SQL - 變數
- PL/SQL - 常量和字面量
- PL/SQL - 運算子
- PL/SQL - 條件
- PL/SQL - 迴圈
- PL/SQL - 字串
- PL/SQL - 陣列
- PL/SQL - 過程
- PL/SQL - 函式
- PL/SQL - 遊標
- PL/SQL - 記錄
- PL/SQL - 異常
- PL/SQL - 觸發器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事務
- PL/SQL - 日期和時間
- PL/SQL - DBMS 輸出
- PL/SQL - 面向物件
- PL/SQL 有用資源
- PL/SQL - 問題和解答
- PL/SQL - 快速指南
- PL/SQL - 有用資源
- PL/SQL - 討論
PL/SQL - 事務
在本章中,我們將討論 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;
回滾事務
對資料庫所做的未經 COMMIT 的更改可以使用 ROLLBACK 命令撤消。
ROLLBACK 命令的通用語法如下:
ROLLBACK [TO SAVEPOINT < savepoint_name>];
當事務由於某些意外情況(例如系統故障)而中止時,自上次提交以來整個事務會自動回滾。如果您未使用儲存點,則只需使用以下語句即可回滾所有更改:
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 - 此語句會回滾到您標記儲存點 sav1 的位置之前的所有更改。
之後,您進行的新更改將開始。
自動事務控制
要每當執行INSERT、UPDATE或DELETE命令時自動執行COMMIT,您可以設定AUTOCOMMIT環境變數,如下所示:
SET AUTOCOMMIT ON;
您可以使用以下命令關閉自動提交模式:
SET AUTOCOMMIT OFF;