鍍金池/ 教程/ 數(shù)據(jù)庫/ SQLite 事務(wù)
SQLite Having 子句
SQLite 運(yùn)算符
SQLite 注入
SQLite Delete 語句
SQLite – Python
SQLite 數(shù)據(jù)類型
SQLite 簡(jiǎn)介
SQLite 創(chuàng)建數(shù)據(jù)庫
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時(shí)間
SQLite AND/OR 運(yùn)算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋)
SQLite NULL 值
SQLite Glob 子句
SQLite 表達(dá)式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫
SQLite 觸發(fā)器
SQLite 語法
SQLite Joins
SQLite Update 語句
SQLite 附加數(shù)據(jù)庫
SQLite 事務(wù)

SQLite 事務(wù)

事務(wù)(Transaction)是一個(gè)對(duì)數(shù)據(jù)庫執(zhí)行工作單元。事務(wù)(Transaction)是以邏輯順序完成的工作單位或序列,可以是由用戶手動(dòng)操作完成,也可以是由某種數(shù)據(jù)庫程序自動(dòng)完成。

事務(wù)(Transaction)是指一個(gè)或多個(gè)更改數(shù)據(jù)庫的擴(kuò)展。例如,如果您正在創(chuàng)建一個(gè)記錄或者更新一個(gè)記錄或者從表中刪除一個(gè)記錄,那么您正在該表上執(zhí)行事務(wù)。重要的是要控制事務(wù)以確保數(shù)據(jù)的完整性和處理數(shù)據(jù)庫錯(cuò)誤。

實(shí)際上,您可以把許多的 SQLite 查詢聯(lián)合成一組,把所有這些放在一起作為事務(wù)的一部分進(jìn)行執(zhí)行。

事務(wù)的屬性

事務(wù)(Transaction)具有以下四個(gè)標(biāo)準(zhǔn)屬性,通常根據(jù)首字母縮寫為 ACID:

  • 原子性(Atomicity):確保工作單位內(nèi)的所有操作都成功完成,否則,事務(wù)會(huì)在出現(xiàn)故障時(shí)終止,之前的操作也會(huì)回滾到以前的狀態(tài)。
  • 一致性(Consistency):確保數(shù)據(jù)庫在成功提交的事務(wù)上正確地改變狀態(tài)。
  • 隔離性(Isolation):使事務(wù)操作相互獨(dú)立和透明。
  • 持久性(Durability):確保已提交事務(wù)的結(jié)果或效果在系統(tǒng)發(fā)生故障的情況下仍然存在。

事務(wù)控制

使用下面的命令來控制事務(wù):

  • BEGIN TRANSACTION:開始事務(wù)處理。
  • COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。
  • ROLLBACK:回滾所做的更改。

事務(wù)控制命令只與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在創(chuàng)建表或刪除表時(shí)使用,因?yàn)檫@些操作在數(shù)據(jù)庫中是自動(dòng)提交的。

BEGIN TRANSACTION 命令

事務(wù)(Transaction)可以使用 BEGIN TRANSACTION 命令或簡(jiǎn)單的 BEGIN 命令來啟動(dòng)。此類事務(wù)通常會(huì)持續(xù)執(zhí)行下去,直到遇到下一個(gè) COMMIT 或 ROLLBACK 命令。不過在數(shù)據(jù)庫關(guān)閉或發(fā)生錯(cuò)誤時(shí),事務(wù)處理也會(huì)回滾。以下是啟動(dòng)一個(gè)事務(wù)的簡(jiǎn)單語法:

    BEGIN;

    or

    BEGIN TRANSACTION;

COMMIT 命令

COMMIT 命令是用于把事務(wù)調(diào)用的更改保存到數(shù)據(jù)庫中的事務(wù)命令。

COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以來的所有事務(wù)保存到數(shù)據(jù)庫。

COMMIT 命令的語法如下:

    COMMIT;

    or

    END TRANSACTION;

ROLLBACK 命令

ROLLBACK 命令是用于撤消尚未保存到數(shù)據(jù)庫的事務(wù)的事務(wù)命令。

ROLLBACK 命令只能用于撤銷自上次發(fā)出 COMMIT 或 ROLLBACK 命令以來的事務(wù)。

ROLLBACK 命令的語法如下:

    ROLLBACK;

實(shí)例

假設(shè) 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

現(xiàn)在,讓我們開始一個(gè)事務(wù),并從表中刪除 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

現(xiàn)在,讓我們開始另一個(gè)事務(wù),從表中刪除 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