位置:首頁 > 數據庫 > SQLite教學 > SQLite TRANSACTIONS/事務

SQLite TRANSACTIONS/事務

事務是一個工作單元,對數據庫執行。事務是在一個邏輯順序,無論是由用戶手動時尚或某種數據庫程序自動完成的工作單位或序列。

事務是指一個或多個更改數據庫的傳播。例如,如果您正在創建一個記錄或更新記錄從表中刪除一條記錄,那麼正在執行的事務在一張表上。重要的是要控製事務以確保數據的完整性和處理數據庫錯誤。

實際上,許多的SQLite查詢成一組,執行所有這些放在一起作為一個事務處理的一部分。

事務的性質:

事務具有以下四個標準屬性,縮寫ACID,通常被稱為:

  • 原子性: 確保工作單位內的所有操作都成功完成,否則,該事務點故障和以往的操作中止回滾到以前的狀態。

  • 一致性: 確保數據庫正確地改變狀態後成功提交的事務。

  • 隔離性: 使事務操作相互獨立的和透明的。

  • 持久性: 確保已提交事務的結果或效果在係統發生故障的情況下仍然存在。

事務控製:

使用下麵的命令來控製事務:

  • BEGIN TRANSACTION: 開始事務處理。

  • COMMIT: 保存更改,或者可以使用END TRANSACTION命令。

  • ROLLBACK: 回滾的變化。

事務控製命令隻用DML命令INSERT,UPDATE和DELETE。他們不能使用創建表時,或刪除它們,因為這些操作在數據庫中被自動提交。

BEGIN TRANSACTION命令:

事務可以啟動或簡單開始使用BEGIN TRANSACTION命令。此類事務常會繼續下去,直到遇到下一個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