国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

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

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

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

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

創(chuàng)建一個(gè)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定的,比如我們?cè)谕鶖?shù)據(jù)庫中一條一條插入數(shù)據(jù)時(shí),聚簇索引能夠保證按順序插入,插入后數(shù)據(jù)的位置和結(jié)構(gòu)不變。非聚簇索引是指我們手動(dòng)、顯式創(chuàng)建的索引,可以為數(shù)據(jù)庫中的每個(gè)列創(chuàng)建索引,和字典中的索引類似,遵循的原則是對(duì)有分散性和組合型的列建立索引,以利于大數(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);
}

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

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

Capture

復(fù)雜查詢情況下對(duì)查詢效率的測(cè)試結(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)一個(gè)特定的數(shù)據(jù)庫事件(DELETE, INSERT, or UPDATE)發(fā)生以后自動(dòng)執(zhí)行的數(shù)據(jù)庫操作,  我們可以把觸發(fā)器理解為高級(jí)語言中的事件(Event)。

假設(shè)我有兩個(gè)表

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

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

在Folder 表中創(chuàng)建一個(gè)觸發(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'

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

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

SQLite 的視圖(View)

視圖可以是一個(gè)虛擬表,里面可以存儲(chǔ)按照一定條件過濾出來的數(shù)據(jù)集合,這樣我們?cè)傧麓蜗氲玫竭@些特定數(shù)據(jù)集合的時(shí)候就不用通過復(fù)雜查詢來獲得,簡(jiǎn)單的查詢指定視圖就可以得到想要的數(shù)據(jù)。

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

Capture

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

Capture2

SQLite 命令行工具

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

1. CMD->sqlite3.exe MySQLiteDbWithoutIndex.s3db

Capture

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

Capture

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

Capture

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

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

SQLite一些常見的使用限制

1. SQLite 不支持Unicode 字符的大小寫比較,請(qǐng)看以下測(cè)試結(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è)計(jì)者們限制了一條復(fù)合SELECT語句的條目數(shù)量。 SQLITE_MAX_COMPOUND_SELECT的默認(rèn)值是500. 這個(gè)值沒有嚴(yán)格限制,在實(shí)踐中,幾乎很難看到一條復(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ā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
青青草在线播放| 黄色片大全在线观看| 六月天色婷婷| 国产在线精品一区二区不卡| 尤物在线视频观看| av免费在线播放| 久精品在线观看| 国产三级在线播放| 在线免费国产| 国产中文在线视频| 精品国内自产拍在线视频| 亚洲妇熟xxxx妇色黄| 天堂在线看视频| 18成年在线观看| www.91在线播放| 国产精品美女视频免费观看软件| 精品视频vs精品视频| wwww亚洲| 中文乱码字幕av网站| 在线观看wwww| 国产三级av在线| 免费中文字幕| 91美女在线| 最新中文字幕av专区| 99在线免费观看| 国产三级在线免费观看| 久久久久久久美女| 亚洲成年人视频| 国产精品久久久久久久久鸭| 老师我好爽再深一点的视频| 国产二区三区四区| 丁香花视频在线观看| www.色婷婷| 四虎国产精品永久| 国产精品久久久精品a级小说| 青青草在线播放| av网站在线播放| 91在线最新| 国产精品被窝福利一区| 国产美女高潮一区二区三区| 日本视频一二三区中文字幕| 亚洲欧洲成人| 伊人久久青青草| 在线欧美一级视频| 在线三级中文| 亚洲成人国产综合| 日本久久国产| 美女av在线播放| 国产在线视频福利| 超碰在线中文| 日本中文字幕视频在线| 国产羞羞视频| 国产高清免费视频| 四虎国产精品永久| 超碰在线97国产| 国产一二区视频| 在线成人一区| 国产精品作爱| 精品999视频| 欧美日韩久久中文字幕| 国产免费电影网站入口| 国产一区二区三区不卡免费观看 | 亚洲精品午夜级久久久久| 伊人狠狠av| 国产主播福利在线| 国产精品久久久久久精| 亚洲欧美精品中文第三| 黄色av免费在线| 国产夫妻视频| 免费高清av| 91蜜桃在线视频| 九色成人在线| 亚洲一本大道| 国产精品日日爱| 日本视频在线观看一区二区三区| 国产女人在线观看| 精品国产一区二区三区久久久狼牙| 四虎在线免费视频| 国产精品久久久精品a级小说| av在线1区2区| 国产精品入口麻豆高清| 老司机精品视频一区二区| 精品51国产黑色丝袜高跟鞋| 国产69精品久久app免费版| 国产99在线|亚洲| 豆国产97在线|亚洲| 性色视频在线| 国产对白叫床清晰在线播放| 天堂在线视频| www.99色.com| 亚洲精品视频在线免费| 91蜜桃在线视频| 国产欧美在线观看视频| 国产男女av| 丁香视频五月| 国产一区在线视频观看| 日本a级黄色| 男女羞羞视频在线观看| www.成人.com| 日本在线免费中文字幕| 在线国产三级| 日本aⅴ写真网站免费| av一级在线| 日本亚洲欧美| 影音先锋中文字幕在线| 精品福利视频导航大全| 在线观看电影av| 日p在线观看| 九九热在线视频免费观看| 免费看的毛片| 99视频免费在线观看| 国产午夜在线视频| 国产经典av| 92国产在线视频| eeuss在线观看| 精品中文字幕不卡在线视频| 国产精品自产拍在线网站| 国产区视频在线| 四虎中文字幕| 粉嫩av一区| 国产视频二区| www.三级.com| 国产精品人人| 六月天色婷婷| 91www在线观看| 欧美日韩亚洲第一页| 国产一级二级在线| www狠狠操| 91欧洲在线视精品在亚洲| 免费av在线| 2021av在线| 国产区在线视频| 久久精品最新免费国产成人 | 天天草天天草| 国产精品一区二三区| 在线免费看黄| 国产系列电影在线播放网址| 日p在线观看| 精品视频二区| 国产精品被窝福利一区| 国产中文字幕av| 日本一二区视频| 怡红院av在线| 在线中文字幕第一页| 日本中文字幕在线播放| www.xxx黄| av一级在线| 国产98在线| 久久精品国产亚洲a∨麻豆| 精品亚洲成a人片在线观看| 国产无套粉嫩白浆在线2022年| www.91av| 青青久草在线| 亚洲第一成人在线视频| 精品麻豆国产| 69久久精品| 精品国产一区二区三区四区阿崩 | 青青草免费在线视频| 国产青青草在线| 五月天婷婷基地| 国产麻豆高清视频在线第一页| 四虎成人免费| 亚洲国产成人综合| 亚洲男人网站| 日本福利午夜视频在线| 日本高清中文字幕在线| 麻豆电影传媒二区| 国产美女免费观看| 国产三级在线观看| 在线中文字幕第一页| 99re热在线观看| 人成在线免费视频| 成视频年人免费看黄网站| 久热中文字幕在线观看| 国产精品一区二区三区高清在线| 午夜视频在线| 992tv在线观看在线播放| 在线看黄网址| 美女av在线播放| 国产一卡2卡3卡四卡网站| 国产精品福利视频一区二区三区| 91av福利| 国产嫩草在线视频| 精品欧美日韩一区二区| 欧美性猛交xxxx免费看久久| 国产男女无套在线播放| 精品国产高清自在线一区二区三区| aaa大片在线观看| 香蕉视频在线观看www| 天堂在线一二区| 亚洲精品白浆| 国产丝袜在线播放| 亚洲欧美小说国产图片| 国产中文字幕在线| 在线国产中文字幕| 国产三区视频在线观看| 热99re久久精品精品免费| 国产精品爱久久久久久久小说| 四虎中文字幕| 国产夫妻视频|