在C 中實現SQLite的事務處理

2021-10-08 11:40:34 字數 2152 閱讀 5381

事務是針對乙個或多個資料庫中資料操作的基本單位,操作時可以把許多個sqlite語句組合為一組,把所有這些放在一起作為事務的一部分進行執行。

所有 sql 命令組成乙個單元。 要麼全部儲存,要麼什麼都不儲存。 這是事務背後的基本思想。

事務控制指令只能和資料庫操作語言(dml命令insert、updata、delete)結合使用。不能再建立表和刪除表時使用,因為這些操作在資料庫中是自動提交的。

事務包括4個屬性

sqltie支援事務處理主要是通過事務標記、事務提交以及事務回滾來保證乙個事務中所有操作都完成或者回滾到事務開始前的狀態。

sql語句

功能用法

begin transaction

標記乙個事務起點

begin[transaction[name]]

end transaction

標記乙個事務終止

end[transaction[name]]

roll back transaction

回滾到事務起始點

roll back[transaction[name]]

commit transaction

標記乙個事務結束

commit[transaction[name]]

static

void

main

(string

args)

catch

(exception ex)

}

事務除了帶來安全的資料操作之外,還提公升了資料插入的效率。

此處案例參考了部落格【如何高效使用sqlite事務 .net (c#】

1.在不使用事務的前提下,批量插入1000條資料,我測試時時間花費4分22.44576秒

using system.data;

using system.data.common;

using system.data.sqlite;

// 建立資料庫檔案

file.

delete

("test1.db3");

sqliteconnection.

createfile

("test1.db3");

dbprovide***ctory factory = sqlitefactory.instance;

using

(dbconnection conn = factory.

createconnection()

)// 停止計時

watch.

stop()

; console.

writeline

(watch.elapsed)

;}

2.在使用事務批量插入1000條資料時,測試發現中共花費2秒

using system.data;

using system.data.common;

using system.data.sqlite;

// 建立資料庫檔案

file.

delete

("test1.db3");

sqliteconnection.

createfile

("test1.db3");

dbprovide***ctory factory = sqlitefactory.instance;

using

(dbconnection conn = factory.

createconnection()

) trans.

commit()

;// <-------------------

}catch

// 停止計時

watch.

stop()

; console.

writeline

(watch.elapsed)

;}

兩者如此大的差距是因為sqlite 預設為每個操作啟動乙個事務,那麼原** 1000 次插入起碼開啟了 1000 個事務,「事務開啟 + sql 執行 + 事務關閉」 自然耗費了大量的時間,這也是後面顯示啟動事務後為什麼如此快的原因。其實這是資料庫操作的基本常識,大家要緊記,不好的**效率差的不是一點半點。

geode springboot下的事務處理

springboot啟用事務 enabletransactionmanagement service層方法開啟事務 transactional 此時方法裡面如果有geode儲存更新操作,就算是異常,關聯式資料庫可以回滾,而geode是不會回滾的,這個事務並沒有 到geode的事務,此時需要自己開始一...

begintrans返回值 VB中的事務處理

vb 中的事務處理有一下兩種方式 1.conn.begintrans 開始執行語句 conn.execute sql if err.number 0 then conn.committrans 提交事務 else conn.rollbacktransaction msgbox 失敗end if 2....

C 中的事務處理

一般的資料庫事務控制要求事務裡所做的操作必須在同乙個資料庫內,這樣在出現錯誤的時候才能回滾 rllback 到初始狀態。這就存在乙個問題,在分布式應用程式中,往往需要同時操作多個資料庫,使用資料庫本身的事務處理,很難滿足程式對事務控制的要求。在com 中,提供了完整的事務服務,可以利用它來完成在分布...