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

首頁 > 數(shù)據(jù)庫 > SQLite > 正文

SQLite數(shù)據(jù)庫管理系統(tǒng)-我所認(rèn)識的數(shù)據(jù)庫引擎

2020-01-31 15:12:41
字體:
供稿:網(wǎng)友

SQLite 是一款輕量級的、被設(shè)計用于嵌入式系統(tǒng)的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。SQLite 是一個實現(xiàn)自我依賴、純客戶端、零配置且支持事務(wù)的數(shù)據(jù)庫引擎。它由D. Richard Hipp首次開發(fā),目前已是世界上最廣泛部署的開源數(shù)據(jù)庫引擎。

本文中,我們將介紹如下內(nèi)容:

創(chuàng)建一個SQLite 數(shù)據(jù)庫

復(fù)制代碼 代碼如下:

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

SQLite 數(shù)據(jù)插入
復(fù)制代碼 代碼如下:

/// <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;
}

復(fù)制代碼 代碼如下:

DateTime entryTime;
string name = string.Empty, title = string.Empty;
GetSampleData(out name, out title, out entryTime);
int id = random.Next();
insertParameterDic.Add("Id", id.ToString());
insertParameterDic.Add("Name", name);
insertParameterDic.Add("Title", title);
insertParameterDic.Add("EntryTime",
entryTime.ToString("yyyy-MM-dd HH:mm:ss"));

db.Insert("Person", insertParameterDic);

SQLite 的事務(wù)處理方式

Begin Transaction:

begin-stmt

Commit Transaction:

commit-stmt

Rollback Transaction:

rollback-stmt

復(fù)制代碼 代碼如下:

try
{
db.OpenTransaction();
Insert4Native();
db.CommiteTransaction();
}
catch (System.Exception ex)
{
mLog.Error(ex.ToString());
db.RollbackTransaction();
}

SQLite 的索引

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

create-index-stmt

復(fù)制代碼 代碼如下:

/// <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);
}

簡單查詢、無關(guān)數(shù)據(jù)庫大小情況下對查詢效率的測試結(jié)果如下(700,000條數(shù)據(jù)):
復(fù)制代碼 代碼如下:

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

Capture

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

復(fù)制代碼 代碼如下:

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";

Capture2

SQLite 的觸發(fā)器(Trigger)

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

假設(shè)我有兩個表

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

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

在Folder 表中創(chuàng)建一個觸發(fā)器Update_Folder_Deleted:

復(fù)制代碼 代碼如下:

CREATE TRIGGER Update_Folder_Deleted UPDATE Deleted ON Folder
Begin
UPDATE File SET Deleted=new.Deleted WHERE ParentGuid=old.Guid;
END;

創(chuàng)建完觸發(fā)器以后在執(zhí)行以下語句:
復(fù)制代碼 代碼如下:

UPDATE Folder SET Deleted=1 WHERE Guid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae'

以上語句將會導(dǎo)致下面的語句自動執(zhí)行:
復(fù)制代碼 代碼如下:

UPDATE File SET Deleted=1 WHERE ParentGuid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae'

SQLite 的視圖(View)

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

在下個例子中,我們創(chuàng)建一個簡單的視圖:

Capture

基于上面的查詢結(jié)果我們創(chuàng)建一個視圖:

Capture2

SQLite 命令行工具

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

1. CMD->sqlite3.exe MySQLiteDbWithoutIndex.s3db

Capture

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

Capture

3. 重新使用命令行打開一個有索引的數(shù)據(jù)庫并執(zhí)行前兩步

Capture

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

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

SQLite一些常見的使用限制

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

Capture

2. 如何處理SQLite 轉(zhuǎn)義字符:

復(fù)制代碼 代碼如下:

INSERT INTO xyz VALUES('5 O''clock');

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

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

復(fù)制代碼 代碼如下:

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, title = string.Empty;
GetSampleData(out name, out title, out entryTime);
int id = random.Next();
query.AppendFormat(" SELECT '{0}','{1}','{2}','{3}'", id, name, title, entryTime.ToString("yyyy-MM-dd HH:mm:ss"));
if (i % 499 == 0)
{
db.ExecuteNonQuery(query.ToString());
query.Remove(0, query.Length);
newQuery = true;
}
}

//executing remaining lines
if (!newQuery)
{
db.ExecuteNonQuery(query.ToString());
query.Remove(0, query.Length);
}
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产欧美丝袜| 日本国产一区二区| 韩国三级hd中文字幕有哪些| 日韩和欧美一区二区三区| 国产高清在线看| www四虎com| 色婷婷综合久久久久| 男人天堂午夜在线| 俄罗斯男人又粗又大| 亚洲人成在线观看| 激情久久五月天| 国产精品国产精品国产专区| 九九久久成人| 啪啪免费视频一区| 水蜜桃av无码| 久久电影国产免费久久电影| 久久久久久久久久久久久av| 国产成人精品视频一区| 国产av第一区| 777视频在线| 91首页免费视频| 欧美高清视频在线观看mv| 在线免费观看av影视天堂| 久久午夜羞羞影院免费观看| www.男人的天堂.com| 国产欧美一区二区三区在线看蜜臂| www.成人在线| 欧美一级免费大片| 亚洲欧美中文日韩在线v日本| 国产+成+人+亚洲欧洲自线| 男女啪啪免费体验区| 久久婷婷国产综合精品青草| 免费精品国产自产拍观看| 日韩av在线一区二区| 成人毛片视频在线观看| 久久se精品一区二区| 精品51国产黑色丝袜高跟鞋| 欧美一级二级三级九九九| 午夜激情一区| 99久久婷婷国产综合精品| 欧美黄色一级视频| 精品国产第一福利网站| 成人性生生活性生交12| 日韩成人午夜电影| 国产高清不卡无码视频| 九九久久免费视频| caopor在线| 国产高清在线精品一区二区三区| 日本三级福利片| 丝袜美女在线观看| 91麻豆精品国产91久久久更新时间| 国产精品免费人成网站| 18精品爽视频在线观看| 欧美一级电影免费在线观看| 久久国产精品99久久久久久老狼| 日韩一区二区三免费高清在线观看| 99re6在线观看| 国产原创在线观看| 99精品视频在线观看免费播放| 自拍偷拍国产精品| www.成年人| 一区二区三区中文字幕精品精品| 在线观看视频一区二区| 欧美国产一区二区在线| 久久99国产视频| 每日更新av在线播放| 成人影院在线观看| 精产国品一二三区| 一区二区三区四区视频免费观看| 波多野结衣之无限发射| 日韩欧美第一页| 91sao在线观看国产| 免费无码不卡视频在线观看| 91精品国产乱码久久久久久久久| 久久av导航| 国产乡下妇女做爰| 亚洲成a人片在线www| 欧美视频在线免费看| 国产欧美在线看| 亚洲 中文字幕 日韩 无码| 亚洲国产一区二区三区网站| 亚洲av无码精品一区二区| 成人午夜精品久久久久久久蜜臀| www.99re7| 成人日韩在线| www.成人在线视频| 国产精品成人免费一区二区视频| 一本色道久久亚洲综合精品蜜桃| 无码人妻精品一区二区三区66| 亚洲自拍偷拍九九九| 日本人妻一区二区三区| 中文字幕精品一区二区精| 久久99精品国产.久久久久久| 亚洲色欲色欲www在线观看| 日韩电影网1区2区| 一个人看的www免费观看视频| 九七电影院97理论片久久tvb| 亚洲激情免费视频| 成人亚洲一区二区一| 国内外成人免费激情在线视频网站| www.xxxx精品| 日韩在线视频精品| 麻豆av一区二区三区久久| 成人毛片老司机大片| 超鹏97在线| av在线免费网站| 亚洲a区在线视频| 香蕉加勒比综合久久| 丁香花高清在线观看完整版| 国产九九在线| 中文字幕中文字幕精品| 四虎影院免费在线| 一区二区欧美视频| 日韩电影免费观看| 欧美精品v日韩精品v国产精品| 一本久久a久久精品亚洲| 久久精品无码一区二区三区毛片| 一本久久a久久精品亚洲| 国产美女福利在线观看| 能在线观看的av网站| 综合激情国产一区| 亚洲人成在线播放| 欧美高清视频在线高清观看mv色露露十八| 欧美成人精品一区二区男人小说| 国产欧美在线一区二区| 99re成人在线| 国产99精品视频| 成人有码在线视频| 3d性欧美动漫精品xxxx软件| 精品国产一区二区在线观看| 男男视频在线观看网站| 尤物在线精品视频| 一区二区三区丝袜| www.69av| 国产亚洲一区二区三区不卡| 成人小说亚洲一区二区三区| 国产精品综合激情| 国产一区二区三区在线观看网站| 久久久成人精品一区二区三区| 亚洲精品乱码久久久久久| 亚洲综合区在线| 精品51国产黑色丝袜高跟鞋| 欧美久久久精品| 久久久久久久久亚洲精品| 捆绑裸体绳奴bdsm亚洲| 精品久久久久久久久久| 国产精品久久久久久久久久三级| 亚洲人成电影院色| 九九热精品视频国产| 香蕉污视频在线观看| 亚洲伊人久久大香线蕉av| 欧美猛男性生活免费| 亚洲bt欧美bt日本bt| 亚洲免费在线| 天天摸天天舔天天操| 国产二区视频在线播放| 99免费在线视频| 尤物视频在线观看国产| 日批视频在线播放| 欧美一区二区公司| 欧美三级三级三级爽爽爽| 国产成人av电影在线播放| av福利在线播放| 成人午夜视频免费看| 你懂的视频在线| 久久久91精品国产一区二区精品| 国内精品久久久久久中文字幕| 丰满少妇一区二区三区| 国产一区二区免费视频| 99www免费人成精品| 欧美午夜18电影| 狠狠入ady亚洲精品经典电影| 欧美黑白配在线| 四虎影院影音| 日日摸.com| 香蕉视频成人在线| 日韩精品视频在线| 亚洲AV无码成人精品区明星换面| 精品国产综合区久久久久久| 成人在线观看91| 日韩精品人妻中文字幕有码| 亚洲欧洲日韩精品在线| 亚洲精品日韩精品| 男生女生差差差的视频在线观看| 中文字幕人妻一区二区三区| 国产高潮在线观看| 亚洲国产精品久久| xx视频.9999.com| 国产一区二区三区在线| 男女全黄做爰文章| 日韩av在线电影观看| 亚洲精品免费视频| 久久激情五月丁香伊人| 国产在线一区二| 亚洲精品ww久久久久久p站| 成年人在线免费观看视频网站| 国产伦精品一区二区三区视频黑人| 久久久久久91精品色婷婷| 娇小的粉嫩xxx极品| 97视频在线观看免费高清完整版在线观看| 久久久国产精品黄毛片| 亚洲欧美日韩一区二区在线| 亚洲欧美国产一区二区三区| 二吊插入一穴一区二区| 一个人看的视频www| 99成人免费视频| 日韩在线第三页| 日韩久久免费电影| www.夜夜爱| 日本在线中文电影| 成人免费xxxxx在线观看| 国产成人在线一区二区| 四虎影视4hu4虎成人| 亚洲一区二区高清| 国产91绿帽单男绿奴| 亚洲精品字幕在线观看| 精品国产一二三| 久久亚洲精精品中文字幕早川悠里| 视频二区在线观看| 国产精品短视频| 国产大片精品免费永久看nba| 久久综合色综合| 欧美久久九九| 91精品久久久久久久91蜜桃| 欧美日韩国产一区二区| 色婷婷av一区二区三| 91精品天堂福利在线观看| 久久精品系列| 精品一区二区三区免费观看| 国产在线欧美在线| 亚洲AV无码一区二区三区性| 在线播放国产精品二区一二区四区| 欧美综合天天夜夜久久| 亚洲国产91精品在线观看| 日本护士做爰视频| 国产精品爱久久久久久久| 澳门成人av网| 本网站久久精品| 欧日韩一区二区三区| 香蕉视频久久久| 国产精品久久久久久久电影| 国产日韩精品久久久| 加勒比海盗1在线观看免费国语版| 伊人久久久久久久久久久久久| 成人手机在线电影| 色呦呦久久久| 国内精品一区二区| 美女视频第一区二区三区免费观看网站| 精品国产18久久久久久| 国产青草视频在线观看| 国产福利第一页| 91国在线精品国内播放| 91精品人妻一区二区三区| 九九视频免费观看视频精品| 日韩美女免费线视频| 蜜桃视频在线播放| 亚洲欧美激情国产综合久久久| 伦伦影院午夜理论片| 免费看污黄网站在线观看| 国产精品一级在线观看| 久久精品日产第一区二区| 99视频精品全部免费在线| 国产无遮挡猛进猛出免费软件| 国产黄a三级三级三级| 四虎影院在线播放| 大波视频国产精品久久| 五月久久久综合一区二区小说| 91免费小视频| 动漫一区二区| 成年网站在线播放| 日韩亚洲第一页| 国产欧美欧洲| 欧美一区二区网站| 国产成人精品免费视频大全最热| 精品久久久久人成| 亚洲一区二区视频在线观看| 一本到12不卡视频在线dvd| 亚洲欧洲一区二区在线观看| 动漫3d精品一区二区三区乱码| 青青国产视频| 另类国产精品一区二区| 国产极品久久久久久久久波多结野| 91蝌蚪porny九色| 91精品久久| 成人午夜一级二级三级| 亚洲成a人片在线www| 99久久精品无码一区二区毛片| 日韩精品资源二区在线| 亚洲美女色禁图| 欧美日韩亚洲第一页| 九九热在线视频观看| 欧美酷刑日本凌虐凌虐| 青青青国产精品一区二区| 国产中文精品久高清在线不| 欧美一区中文字幕| 欧美激情99| 狠狠躁日日躁夜夜躁av| 美女一区网站| 色偷偷色偷偷色偷偷在线视频| 国产成人av一区二区三区不卡| 国产av国片精品| 久久久久久久极品内射| 亚洲国产黄色片| 青青草视频在线青草免费观看| 国模视频一区二区| 青娱乐在线视频免费观看| 91在线丨porny丨国产| 69精品丰满人妻无码视频a片| 亚洲精品88| 波多野结衣久久| 88av在线| 精品久久久久久久久中文字幕| 国产欧美韩日| 成人国产综合| 色欲色香天天天综合网www| 亚洲精品一区二区三区四区| 青春草在线视频观看| 日韩暖暖在线视频| 日韩动漫在线观看| 中文字幕久久av| 国产福利电影在线观看| 国产精品69久久| 青青青在线播放| 欧美成人三区| 国产在线视频在线| 国产精品乱码一区二区三区| 尤物九九久久国产精品的分类| 岛国视频午夜一区免费在线观看|