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í)行。

 

1. 事務(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ā)生故障的情況下仍然存在。

 

2. 事務(wù)控制

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

  • begin transaction:開始事務(wù)處理。
  • commit:保存更改,或者可以使用 end transaction 命令。
  • rollback:回滾所做的更改。

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

 

3. begin transaction 命令

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

begin;

or 

begin transaction;

 

4. commit 命令

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

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

commit 命令的語法如下:

commit;

or

end transaction;

 

5. rollback 命令

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

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

rollback 命令的語法如下:

rollback;

 

6. 范例

假設(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

下一節(jié):sqlite 子查詢

sqlite教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频