
- SQLite 教程
- SQLite - 首頁
- SQLite - 概述
- SQLite - 安裝
- SQLite - 命令
- SQLite - 語法
- SQLite - 資料型別
- SQLite - 建立資料庫
- SQLite - 附加資料庫
- SQLite - 分離資料庫
- SQLite - 建立表
- SQLite - 刪除表
- SQLite - INSERT 查詢
- SQLite - SELECT 查詢
- SQLite - 運算子
- SQLite - 表示式
- SQLite - WHERE 子句
- SQLite - AND & OR 子句
- SQLite - UPDATE 查詢
- SQLite - DELETE 查詢
- SQLite - LIKE 子句
- SQLite - GLOB 子句
- SQLite - LIMIT 子句
- SQLite - ORDER BY 子句
- SQLite - GROUP BY 子句
- SQLite - HAVING 子句
- SQLite - DISTINCT 關鍵字
- 高階 SQLite
- SQLite - PRAGMA
- SQLite - 約束
- SQLite - 聯接
- SQLite - UNION 子句
- SQLite - NULL 值
- SQLite - 別名語法
- SQLite - 觸發器
- SQLite - 索引
- SQLite - INDEXED BY 子句
- SQLite - ALTER 命令
- SQLite - TRUNCATE 命令
- SQLite - 檢視
- SQLite - 事務
- SQLite - 子查詢
- SQLite - AUTOINCREMENT
- SQLite - 注入
- SQLite - EXPLAIN
- SQLite - VACUUM
- SQLite - 日期和時間
- SQLite - 有用函式
- SQLite 有用資源
- SQLite - 快速指南
- SQLite - 有用資源
- SQLite - 討論
SQLite - 事務
事務是對資料庫執行的一組工作單元。事務是按邏輯順序完成的工作單元或序列,無論是使用者手動執行還是由某種資料庫程式自動執行。
事務是對資料庫進行的一個或多個更改的傳播。例如,如果您正在建立、更新或從表中刪除記錄,那麼您就是在對錶執行事務。控制事務對於確保資料完整性和處理資料庫錯誤非常重要。
實際上,您會將許多 SQLite 查詢組合成一個組,並將它們作為一個事務一起執行。
事務的特性
事務具有以下四個標準特性,通常用首字母縮寫詞 ACID 來表示。
原子性 - 確保工作單元中的所有操作都成功完成;否則,事務將在發生故障時中止,並且之前的操作將回滾到其以前的狀態。
一致性 - 確保資料庫在成功提交事務後正確地更改狀態。
隔離性 - 使事務能夠獨立於彼此並對其透明地執行。
永續性 - 確保已提交事務的結果或效果在系統發生故障時仍然存在。
事務控制
以下是用於控制事務的命令
BEGIN TRANSACTION - 開始事務。
COMMIT - 儲存更改,或者您可以使用END TRANSACTION命令。
ROLLBACK - 回滾更改。
事務控制命令僅與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在建立或刪除表時不能使用它們,因為這些操作會自動提交到資料庫中。
BEGIN TRANSACTION 命令
可以使用 BEGIN TRANSACTION 或簡寫為 BEGIN 命令來啟動事務。此類事務通常持續到遇到下一個 COMMIT 或 ROLLBACK 命令為止。但是,如果資料庫關閉或發生錯誤,事務也將回滾。以下是啟動事務的簡單語法。
BEGIN; or BEGIN TRANSACTION;
COMMIT 命令
COMMIT 命令是用於將事務呼叫的更改儲存到資料庫的事務命令。
COMMIT 命令將自上次 COMMIT 或 ROLLBACK 命令以來的所有事務儲存到資料庫。
以下是 COMMIT 命令的語法。
COMMIT; or END TRANSACTION;
ROLLBACK 命令
ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。
ROLLBACK 命令只能用於撤消自發出上次 COMMIT 或 ROLLBACK 命令以來的事務。
以下是 ROLLBACK 命令的語法。
ROLLBACK;
示例
考慮具有以下記錄的COMPANY表。
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
現在,讓我們啟動一個事務並刪除表中年齡等於 25 的記錄。然後,使用 ROLLBACK 命令撤消所有更改。
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> ROLLBACK;
現在,如果您檢查 COMPANY 表,它仍然具有以下記錄 -
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
讓我們啟動另一個事務並刪除表中年齡等於 25 的記錄,最後我們使用 COMMIT 命令提交所有更改。
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> COMMIT;
如果您現在檢查 COMPANY 表,它仍然具有以下記錄 -
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0