
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線 vs 右連線
- SQL - UNION vs 連線
- SQL 金鑰
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 組合鍵
- SQL - 候選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 通用表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - 事務
SQL 事務
事務是在資料庫上執行的一個工作單元或序列。事務以邏輯順序完成,無論是使用者手動執行,還是由某種資料庫程式自動執行。
事務是對資料庫進行一個或多個更改的傳播。例如,如果您正在建立、更新或刪除表中的記錄,則您正在對該表執行事務。控制這些事務非常重要,以確保資料完整性並處理資料庫錯誤。
實際上,您會將許多 SQL 查詢組合到一個組中,並將它們一起執行作為事務的一部分。
事務的特性
事務具有以下四個標準屬性,通常用首字母縮寫詞 **ACID** 來表示。
**原子性** - 確保工作單元中的所有操作都成功完成。否則,事務在故障點中止,所有先前操作都回滾到其先前狀態。
**一致性** - 確保資料庫在成功提交的事務後正確更改狀態。
**隔離性** - 使事務能夠獨立於彼此並且對彼此透明地執行。
**永續性** - 確保已提交事務的結果或效果在系統故障的情況下仍然存在。
事務控制命令
事務控制命令僅與 **DML 命令** 一起使用,例如 - INSERT、UPDATE 和 DELETE。在建立或刪除表時不能使用它們,因為這些操作會自動提交到資料庫。以下命令用於控制事務。
**COMMIT** - 儲存更改。
**ROLLBACK** - 回滾更改。
**SAVEPOINT** - 在事務組中建立回滾點。
**SET TRANSACTION** - 為事務命名。
COMMIT 命令
COMMIT 命令是用於儲存事務呼叫的更改的事務命令。它儲存自上次 COMMIT 或 ROLLBACK 以來對資料庫進行的所有事務。
COMMIT 命令的語法如下所示。
COMMIT;
示例
首先,讓我們使用以下查詢建立一個名為 CUSTOMERS 的表:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
我們將一些記錄插入到上面建立的表中:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00), (2, 'Khilan', 25, 'Delhi', 1500.00), (3, 'Kaushik', 23, 'Kota', 2000.00), (4, 'Chaitali', 25, 'Mumbai', 6500.00), (5, 'Hardik', 27, 'Bhopal', 8500.00), (6, 'Komal', 22, 'Hyderabad', 4500.00), (7, 'Muffy', 24, 'Indore', 10000.00);
表將如下建立:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
以下查詢將刪除表中年齡為 25 的記錄,然後提交資料庫中的更改。
DELETE FROM CUSTOMERS WHERE AGE = 25; COMMIT;
驗證
表中的兩行將被刪除,如果您使用 SELECT 語句驗證 CUSTOMERS 表的內容,如下所示:
SELECT * FROM CUSTOMERS;
表將顯示如下:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
ROLLBACK 命令
ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。此命令只能撤消自上次 COMMIT 或 ROLLBACK 以來進行的事務。
ROLLBACK 命令的語法如下:
ROLLBACK;
示例
假設 CUSTOMERS 表具有以下記錄:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
以下查詢將刪除表中 AGE 值為 25 的記錄,然後回滾資料庫中的更改。
DELETE FROM CUSTOMERS WHERE AGE = 25; ROLLBACK;
驗證
刪除操作不會影響表,SELECT 語句將產生以下結果。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SAVEPOINT 命令
SAVEPOINT 是事務中的邏輯回滾點。
通常,當您執行 ROLLBACK 命令時,它會撤消直到上次 COMMIT 的更改。但是,如果您建立儲存點,您可以將事務部分回滾到這些點。您可以在兩次提交之間建立多個儲存點。
在事務中建立 SAVEPOINT 的語法如下所示。
SAVEPOINT savepoint_name;
然後,要回滾到建立的 SAVEPOINT,您可以使用以下語法:
ROLLBACK TO savepoint_name;
示例
以下是一個示例,您計劃從 CUSTOMERS 表中刪除三條不同的記錄。您希望在每次刪除之前建立一個 SAVEPOINT,以便您可以隨時回滾到任何 SAVEPOINT 以將適當的資料返回到其原始狀態。
假設 CUSTOMERS 表具有以下記錄。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
以下程式碼塊包含一系列操作。
SAVEPOINT SP1; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=1; Query OK, 1 row affected (0.01 sec) SAVEPOINT SP2; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=2; Query OK, 0 rows affected (0.00 sec) SAVEPOINT SP3; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=3; Query OK, 1 row affected (0.01 sec)
現在已經進行了三次刪除,假設您改變了主意,並決定回滾到您標識為 SP2 的 SAVEPOINT。因為 SP2 是在第一次刪除後建立的,所以最後兩次刪除被撤消了:
ROLLBACK TO SP2;
驗證
如果您顯示 CUSTOMERS 表,您可以注意到只有第一次刪除發生了,因為您回滾到了 SP2。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
RELEASE SAVEPOINT 命令
RELEASE SAVEPOINT 命令用於刪除現有的 SAVEPOINT。
RELEASE SAVEPOINT 命令的語法如下所示。
RELEASE SAVEPOINT SAVEPOINT_NAME;
釋放 SAVEPOINT 後,您將無法再使用 ROLLBACK 命令撤消自上次 SAVEPOINT 以來執行的事務。
SET TRANSACTION 命令
SET TRANSACTION 命令可用於啟動資料庫事務。此命令用於指定後續事務的特性。例如,您可以指定事務為只讀或讀寫。
語法
SET TRANSACTION 命令的語法如下所示。
SET TRANSACTION [ READ WRITE | READ ONLY ];