[Sqlite] 嵌入式資料庫事務理解以及例項操作

mchdba發表於2014-08-30


SQLite 事務(Transaction

事務(Transaction)是一個對資料庫執行工作單元。事務(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;
or
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表,會看到沒有這條記錄,如下圖所示:

再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢復。

 

現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那麼就不會再看到已經刪除的記錄,如下所示:


再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢復。

 

現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那麼就不會再看到已經刪除的記錄,如下所示:

 

 

參考文章地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1260660/,如需轉載,請註明出處,否則將追究法律責任。

相關文章