SQLite 事務(Transaction)
事務(Transaction)是指一個或多個更改資料庫的擴充。例如,如果您正在建立一個記錄或者更新一個記錄或者從表中删除一個記錄,那麼您正在該表上執行事務。重要的是要控制事務以確定資料的完整性和處理資料庫錯誤。
實際上,您可以把許多的 SQLite 查詢聯合成一組,把所有這些放在一起作為事務的一部分進行執行。
1,事務的屬性
事務(Transaction)具有以下四個标準屬性,通常根據首字母縮寫為 ACID:
·原子性(Atomicity):確定工作機關内的所有操作都成功完成,否則,事務會在出現故障時終止,之前的操作也會復原到以前的狀态。
·一緻性(Consistency):確定資料庫在成功送出的事務上正确地改變狀态。
·隔離性(Isolation):使事務操作互相獨立和透明。
·持久性(Durability):確定已送出事務的結果或效果在系統發生故障的情況下仍然存在。
2,事務控制
使用下面的指令來控制事務:
·BEGIN TRANSACTION:開始事務處理。
·COMMIT:儲存更改,或者可以使用 END TRANSACTION 指令。
·ROLLBACK:復原所做的更改。
事務控制指令隻與 DML 指令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在建立表或删除表時使用,因為這些操作在資料庫中是自動送出的。
3,BEGIN TRANSACTION 指令
事務(Transaction)可以使用 BEGIN TRANSACTION 指令或簡單的 BEGIN 指令來啟動。此類事務通常會持續執行下去,直到遇到下一個 COMMIT 或 ROLLBACK 指令。不過在資料庫關閉或發生錯誤時,事務處理也會復原。以下是啟動一個事務的簡單文法:
BEGIN;
or
BEGIN TRANSACTION;
4,COMMIT 指令
COMMIT 指令是用于把事務調用的更改儲存到資料庫中的事務指令。
COMMIT 指令把自上次 COMMIT 或 ROLLBACK 指令以來的所有事務儲存到資料庫。
COMMIT 指令的文法如下:
COMMIT;
END TRANSACTION;
5,ROLLBACK 指令
ROLLBACK 指令是用于撤消尚未儲存到資料庫的事務的事務指令。
ROLLBACK 指令隻能用于撤銷自上次發出 COMMIT 或 ROLLBACK 指令以來的事務。
ROLLBACK 指令的文法如下:
ROLLBACK;
6,執行個體操作
[root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));
現在,讓我們開始一個事務,并從表中删除 age = 25 的記錄,最後,我們使用 ROLLBACK 指令撤消所有的更改。
先開啟事務,然後删除AGE為25的記錄,查詢COMPANY表,會看到沒有這條記錄,如下圖所示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5yRapENxcTNzEDMxMDM5ADNxAjMfJzN2IDO5QTMvwVOw8CX0EDMy8CXzRnbl1GajFGd0F2Lc12bj5yZulGdzVGdxUjL3d3dvw1LcpDc0RHaiojIsJye.jpg)
再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢複。
現在開啟一個事務,删除AGE為25的記錄,再執行COMMIT送出是以的更改,那麼就不會再看到已經删除的記錄,如下所示:
最新内容請見作者的GitHub頁:http://qaseven.github.io/