亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQLite > 正文

SQLite數據庫管理系統-我所認識的數據庫引擎

2020-01-25 19:30:20
字體:
來源:轉載
供稿:網友
SQLite是一款輕量級的、被設計用于嵌入式系統的關聯式數據庫管理系統,SQLite 是一個實現自我依賴、純客戶端、零配置且支持事務的數據庫引擎
 
 

SQLite 是一款輕量級的、被設計用于嵌入式系統的關聯式數據庫管理系統。SQLite 是一個實現自我依賴、純客戶端、零配置且支持事務的數據庫引擎。它由D. Richard Hipp首次開發,目前已是世界上最廣泛部署的開源數據庫引擎。

本文中,我們將介紹如下內容:

創建一個SQLite 數據庫

復制代碼代碼如下:

SQLiteConnection conn = new SQLiteConnection("Data Source=mytest.s3db"); 
conn.Open();

SQLite 數據插入
復制代碼代碼如下:

/// <summary> 
/// Allows the programmer to easily insert into the DB 
/// </summary> 
/// <param name="tableName">The table into which we insert the data.</param> 
/// <param name="data">A dictionary containing the column names and data for the insert.</param> 
/// <returns>A boolean true or false to signify success or failure.</returns> 
public bool Insert(string tableName, Dictionary<string, string> data) 

Boolean returnCode = true; 
StringBuilder columnBuilder = new StringBuilder(); 
StringBuilder valueBuilder = new StringBuilder(); 
foreach (KeyValuePair<string, string> val in data) 

columnBuilder.AppendFormat(" {0},", val.Key); 
valueBuilder.AppendFormat(" '{0}',", val.Value); 

columnBuilder.Remove(columnBuilder.Length - 1, 1); 
valueBuilder.Remove(valueBuilder.Length - 1, 1); 
try 

this.ExecuteNonQuery(string.Format("INSERT INTO {0}({1}) VALUES({2});", 
tableName, columnBuilder, valueBuilder)); 

catch (Exception ex) 

mLog.Warn(ex.ToString()); 
returnCode = false; 

return returnCode; 
}

復制代碼代碼如下:

DateTime entryTime; 
string name = string.Empty, /> SQLite 的事務處理方式

 

Begin Transaction:

SQLite數據庫管理系統-我所認識的數據庫引擎

Commit Transaction:

SQLite數據庫管理系統-我所認識的數據庫引擎

Rollback Transaction:

SQLite數據庫管理系統-我所認識的數據庫引擎

 

復制代碼代碼如下:

try 

db.OpenTransaction(); 
Insert4Native(); 
db.CommiteTransaction(); 

catch (System.Exception ex) 

mLog.Error(ex.ToString()); 
db.RollbackTransaction(); 
}

SQLite 的索引

 

索引是一種用來優化查詢的特性,在數據中分為聚簇索引和非聚簇索引;前者是由數據庫中數據組織方式決定的,比如我們在往數據庫中一條一條插入數據時,聚簇索引能夠保證按順序插入,插入后數據的位置和結構不變。非聚簇索引是指我們手動、顯式創建的索引,可以為數據庫中的每個列創建索引,和字典中的索引類似,遵循的原則是對有分散性和組合型的列建立索引,以利于大數據和復雜查詢情況下提高查詢效率。

SQLite數據庫管理系統-我所認識的數據庫引擎

 

復制代碼代碼如下:

/// <summary> 
/// Create index 
/// </summary> 
/// <param name="tableName">table name</param> 
/// <param name="columnName">column name</param> 
/// <param name="indexName">index name</param> 
public void CreateIndex(string tableName, string columnName, string indexName) 

string createIndexText = string.Format("CREATE INDEX {0} ON {1} ({2});", 
indexName, tableName, columnName); 
ExecuteNonQuery(createIndexText); 
}

簡單查詢無關數據庫大小情況下對查詢效率的測試結果如下(700,000條數據):
復制代碼代碼如下:

string sql = "SELECT LeafName FROM File WHERE Length > 5000";

 

	SQLite數據庫管理系統-我所認識的數據庫引擎	

復雜查詢情況下對查詢效率的測試結果如下(~40,000條數據):

復制代碼代碼如下:
string sql = "SELECT folder.Location AS FilePath"  + "FROM Folder folder LEFT JOIN File file ON file.ParentGuid=folder.Guid"  +"WHERE file.Length > 5000000 GROUP BY File.LeafName";

 

SQLite數據庫管理系統-我所認識的數據庫引擎

SQLite 的觸發器(Trigger)

觸發器是指當一個特定的數據庫事件(DELETE, INSERT, or UPDATE)發生以后自動執行的數據庫操作,  我們可以把觸發器理解為高級語言中的事件(Event)。

假設我有兩個表

Folder(Guid VCHAR(255) NOT NULL, Deleted BOOLEAN DEFAULT 0)

File(ParentGuid VCHAR(255) NOT NULL, Deleted BOOLEAN DEFAULT 0)

在Folder 表中創建一個觸發器Update_Folder_Deleted:

復制代碼代碼如下:
CREATE TRIGGER Update_Folder_Deleted UPDATE Deleted ON Folder  Begin  UPDATE File SET Deleted=new.Deleted WHERE ParentGuid=old.Guid;  END;
創建完觸發器以后在執行以下語句:
復制代碼代碼如下:
UPDATE Folder SET Deleted=1 WHERE Guid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae' 
以上語句將會導致下面的語句自動執行:
復制代碼代碼如下:
UPDATE File SET Deleted=1 WHERE ParentGuid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae' 
SQLite 的視圖(View)

 

視圖可以是一個虛擬表,里面可以存儲按照一定條件過濾出來的數據集合,這樣我們再下次想得到這些特定數據集合的時候就不用通過復雜查詢來獲得,簡單的查詢指定視圖就可以得到想要的數據。

在下個例子中,我們創建一個簡單的視圖:

SQLite數據庫管理系統-我所認識的數據庫引擎

基于上面的查詢結果我們創建一個視圖:

SQLite數據庫管理系統-我所認識的數據庫引擎

SQLite 命令行工具

SQLite 庫中包含了一個SQLite3.exe 的命令行工具,它可以實現SQLite 各項基本操作。這里只介紹一下如何使用它來分析我們的查詢結果:

1. CMD->sqlite3.exe MySQLiteDbWithoutIndex.s3db

SQLite數據庫管理系統-我所認識的數據庫引擎

2. 開啟EXPLAIN 功能并分析指定查詢結果

SQLite數據庫管理系統-我所認識的數據庫引擎

3. 重新使用命令行打開一個有索引的數據庫并執行前兩步

SQLite數據庫管理系統-我所認識的數據庫引擎

4. 通過比較兩個不同查詢語句的分析結果,我們可以發現如果查詢過程中使用了索引,SQLite 會在detail 列中提示我們。

5. 要注意的是每條語句后面都要加分號“;”

SQLite一些常見的使用限制

1. SQLite 不支持Unicode 字符的大小寫比較,請看以下測試結果:

SQLite數據庫管理系統-我所認識的數據庫引擎

2. 如何處理SQLite 轉義字符:

復制代碼代碼如下:
INSERT INTO xyz VALUES('5 O''clock');
3. 一條復合SELECT語句的條數限制: 一條復合查詢語句是指多條SELECT語句由 UNION, UNION ALL, EXCEPT, or INTERSECT 連接起來. SQLite進程的代碼生成器使用遞歸算法來組合SELECT語句。為了降低堆棧的大小,SQLite 的設計者們限制了一條復合SELECT語句的條目數量。 SQLITE_MAX_COMPOUND_SELECT的默認值是500. 這個值沒有嚴格限制,在實踐中,幾乎很難看到一條復合查詢語句的條目數大于500的。

 

這里提到復合查詢的原因是我們可以使用它來幫助我們快速插入大量數據:

復制代碼代碼如下:
public void Insert4SelectUnion()  {  bool newQuery = true;  StringBuilder query = new StringBuilder(4 * ROWS4ACTION);  for (int i = 0; i < ROWS4ACTION; i++)  {  if (newQuery)  {  query.Append("INSERT INTO Person");  newQuery = false;  }  else  {  query.Append(" UNION ALL");  }  DateTime entryTime;  string name = string.Empty, style="padding: 0px 0px 20px; margin: 0px; clear: both; overflow: hidden; width: 680px; color: rgb(0, 0, 0); font-family: Tahoma, Helvetica, Arial, 宋體, sans-serif; background-color: rgb(247, 252, 255);">  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美激情精品| 福利视频一区二区| 亚洲aⅴ男人的天堂在线观看| 久久久久国产精品www| 91香蕉嫩草影院入口| 国产一区av在线| 日韩av在线不卡| 久久久国产在线视频| 欧美黄色性视频| 成人动漫网站在线观看| 欧美疯狂做受xxxx高潮| 日日狠狠久久偷偷四色综合免费| 亚洲精品福利免费在线观看| 欧美激情va永久在线播放| 亚洲电影免费观看高清完整版| 91免费国产视频| 18一19gay欧美视频网站| 美女黄色丝袜一区| 国内外成人免费激情在线视频| 国产成人aa精品一区在线播放| 欧美做受高潮1| 亚洲日本aⅴ片在线观看香蕉| 在线观看欧美视频| 国产精品日韩在线播放| 国产日韩在线看| 久久99国产综合精品女同| 日韩av综合网站| 亚洲激情自拍图| 亚洲天堂免费观看| 亚洲欧洲午夜一线一品| 欧美日韩激情美女| 精品久久久久久久久久国产| 国产成人精品优优av| 亚洲人成网7777777国产| 久久激情视频久久| 97在线看免费观看视频在线观看| 精品国产视频在线| 久久精品国产亚洲精品2020| 久久视频国产精品免费视频在线| 日韩中文字幕在线视频| 精品久久久久久久久久ntr影视| 欧美极品美女电影一区| 日韩精品免费观看| 欧洲成人午夜免费大片| 亚洲一区二区免费在线| xvideos国产精品| 欧美一区二区三区免费视| 亚洲欧美激情视频| 中文字幕亚洲第一| 久久久中文字幕| 亚洲精品久久视频| 亚洲视频自拍偷拍| 国产成人高清激情视频在线观看| 亚洲精品美女在线| 狠狠色香婷婷久久亚洲精品| 国产欧美亚洲视频| 亚洲精品日韩av| 亚洲欧洲成视频免费观看| 亚洲成人激情视频| 日韩电影中文字幕| 91视频九色网站| 亚洲精品自拍偷拍| 欧美激情亚洲综合一区| 精品国产区一区二区三区在线观看| 国产欧美日韩中文字幕| 成人免费观看a| 国产精品久久久久久久久粉嫩av| 日韩久久精品成人| 成人精品在线观看| 成人疯狂猛交xxx| 国产v综合ⅴ日韩v欧美大片| 成人免费观看49www在线观看| 亚洲激情国产精品| 亚洲精品欧美日韩专区| 91精品啪aⅴ在线观看国产| 欧日韩在线观看| 亚洲人成绝费网站色www| 欧美成人在线免费视频| 国产精品一二三在线| 日韩欧美国产视频| 精品成人av一区| 欧美大尺度电影在线观看| 成人夜晚看av| 国产欧美日韩精品在线观看| 久久av中文字幕| 欧美美最猛性xxxxxx| 国产成人av网址| 国产精品久久久久久久av电影| 国产精品自拍视频| 精品久久久视频| 两个人的视频www国产精品| 亚洲天堂av在线免费观看| 国产精品久久久久久亚洲影视| 欧美老少配视频| 亚洲永久免费观看| 日韩av免费观影| 亚洲亚裔videos黑人hd| 欧美高清在线视频观看不卡| 亚洲视频一区二区三区| 欧美精品激情blacked18| 亚洲天堂视频在线观看| 97成人精品区在线播放| 亚洲精品国产福利| 欧美猛男性生活免费| 最新国产精品拍自在线播放| 国产精品欧美激情| 日韩av电影在线网| 国产精品亚洲视频在线观看| 日韩资源在线观看| 日韩欧美在线视频日韩欧美在线视频| 成人黄在线观看| 久久久在线视频| 国产主播精品在线| 亚洲精品av在线播放| 久久综合久久八八| 欧美激情按摩在线| 日韩欧美国产中文字幕| 亚洲一级片在线看| 亚洲国产精品高清久久久| 国外日韩电影在线观看| 91精品国产777在线观看| 国产视频精品免费播放| 国产噜噜噜噜噜久久久久久久久| 成人福利视频网| 国内精品久久久久久| 欧美巨大黑人极品精男| 性欧美xxxx交| 亚洲自拍偷拍网址| 亚洲欧美成人精品| 91最新在线免费观看| 久久五月天综合| 久久福利视频导航| 欧美亚洲第一区| 久久久精品美女| 操91在线视频| 欧美乱大交xxxxx| 成人激情av在线| 一区二区成人av| 精品一区二区电影| 亚洲一区第一页| 久久亚洲精品一区二区| 亚洲专区中文字幕| 日韩精品一区二区视频| xx视频.9999.com| 国产精品第一第二| 国产精品mp4| 91免费版网站入口| 日韩视频免费观看| 日韩精品福利网站| 日韩高清免费在线| 6080yy精品一区二区三区| 亚洲欧美日韩国产精品| 夜夜嗨av一区二区三区免费区| 国产精品久久久久久久久久| 国产欧美日韩中文| 亚洲一区二区三区在线免费观看| 日本精品一区二区三区在线播放视频| 自拍偷拍亚洲欧美| 91精品久久久久久久久久另类| 亚洲深夜福利网站| 国产午夜精品免费一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 欧美日韩精品在线观看| 日韩色av导航|