SQLite經典教學課程login
SQLite經典教學課程
作者:php.cn  更新時間:2022-04-13 17:05:02

SQLite 事務


交易(Transaction)是一個對資料庫執行工作單元。事務(Transaction)是以邏輯順序完成的工作單位或序列,可以是由使用者手動操作完成,也可以是由某種資料庫程式自動完成。

事務(Transaction)是指一個或多個更改資料庫的擴充。例如,如果您正在建立記錄或更新記錄或從表中刪除記錄,那麼您正在該表上執行交易。重要的是要控制事務以確保資料的完整性和處理資料庫錯誤。

實際上,您可以把許多的 SQLite 查詢聯合成一組,把所有這些放在一起作為事務的一部分進行執行。

事務的屬性

事務(Transaction)具有以下四個標準屬性,通常根據首字母縮寫為ACID:

  • 原子性(Atomicity ):確保工作單位內的所有操作都成功完成,否則,交易會在發生故障時終止,先前的操作也會回滾到先前的狀態。

  • 一致性(Consistency):確保資料庫在成功提交的交易上正確地改變狀態。

  • 隔離性(Isolation):使交易操作相互獨立且透明。

  • 持久性(Durability):確保已提交交易的結果或效果在系統發生故障的情況下仍然存在。

交易控制

使用下面的命令來控制交易:

  • BEGIN TRANSACTION:開始事務處理。

  • COMMIT:儲存更改,或可以使用 END TRANSACTION 指令。

  • ROLLBACK:回滾所做的變更。

交易控制指令只與 DML 指令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在建立表或刪除表時使用,因為這些操作在資料庫中是自動提交的。

BEGIN TRANSACTION 指令

交易(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

現在,讓我們開始一個事務,並從表中刪除age = 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

現在,讓我們開始另一個事務,從表中刪除age = 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
#

PHP中文網