日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLite的事务处理方式

發(fā)布時間:2025/3/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite的事务处理方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SQLite把每一條SQL語句解釋為一個事務,這就是事務處理自動提交模式;也可以通過begin...commit語句實現(xiàn)對多條SQL語句的包裹,也就是多條SQL語句在一個事務中進行處理,這就是用戶提交模式

寫事務擦寫flash事務處理流程:

1.申請共享鎖(shared lock)

在寫數(shù)據(jù)庫之前,必須先讀取數(shù)據(jù)庫的格式以及所要修改的數(shù)據(jù)頁。

每個sqlite數(shù)據(jù)庫都有一個只讀表sqlite_master,他定義數(shù)據(jù)庫的模式

1 create table sqlite_master( 2 type TEXT, 3 name TEXT, 4 tbl_name TEXT, 5 rootpage INTEGER, 6 sql TEXT 7 );

type字段:‘table’,‘index’,‘view’,‘trigger’;'table'可以是普通表和虛擬表(virtual)

name字段:表、索引、視圖、觸發(fā)器名稱

tbl_name字段:對于表和視圖,tbl_name=name;對于索引,tbl_name是該索引所屬的表的名稱;對于觸發(fā)器,tbl_name存儲引起觸發(fā)器動作的表或視圖名稱

rootpage字段:對于表和索引,存儲root b-tree的頁數(shù);對于視圖、觸發(fā)器和虛擬表,rootpage=0 || NULL

sql字段:‘CREATE TABLE’,‘CREATE VIEW’,‘CREATE INDEX’,‘CREATE VIRTUAL TABLE’,‘CREATE TRIGGER’

2.從數(shù)據(jù)庫讀取信息

數(shù)據(jù)頁首先從flash讀到系統(tǒng)緩存,然后從系統(tǒng)緩存?zhèn)鬟f到用戶空間,用戶空間與系統(tǒng)緩存都位于RAM中。

3.申請一個預留鎖(reserved lock)

在修改數(shù)據(jù)庫文件之前,寫事務必須獲得其預留鎖,意味著寫事務將來會寫數(shù)據(jù)庫,現(xiàn)階段只讀取數(shù)據(jù)庫,reserved lock和shared lock可以同時存在,但是只能有一個reserved lock和多個shared lock。

4.生成回滾日志文件

申請預留鎖成功之后,會在系統(tǒng)緩存中生成回滾日志文件,并要把要修改頁的原始數(shù)據(jù)寫入回滾日志。

5.修改用戶空間的數(shù)據(jù)頁

6.刷回滾日志文件到flash

回滾日志刷新是二次刷新,首先將回滾日志內(nèi)容(原始數(shù)據(jù))刷新至flash;然后將頁總數(shù)寫入回滾日志文件頭,將文件頭刷新至flash

7.獲得一個獨享鎖(exclusive lock)

任何需要寫數(shù)據(jù)庫文件的事務必須獲得獨享鎖,任意時刻只有一個事務可以獲得獨享鎖

8.將修改數(shù)據(jù)寫入到數(shù)據(jù)庫文件中

將用戶空間的數(shù)據(jù)寫入操作系統(tǒng)緩存

9.刷新修改頁到flash

10.刪除回滾日志文件

11.釋放exclusive lock

轉(zhuǎn)載于:https://www.cnblogs.com/binger1990/archive/2012/10/08/2715676.html

總結

以上是生活随笔為你收集整理的SQLite的事务处理方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。