SQLite簡介
SQLite是一個進程內的輕量級嵌入式數據庫,它的數據庫就是一個文件,實現了自給自足、無服務器、零配置的、事務性的SQL數據庫引擎。它是一個零配置的數據庫,這就體現出來SQLite與其他數據庫的最大的區別:SQLite不需要在系統中配置,直接可以使用。且SQLite不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite可直接訪問其存儲文件。
SQLite對於其他數據庫有什么優勢:
-
不需要配置,不需要安裝和管理
-
不需要一個單獨的服務器進程或操作的系統(無服務器的)
-
一個完整的SQLite數據庫存儲在一個單一的跨平台的磁盤文件上
-
SQLite是一個自給自足的數據庫,這也就意味着不需要任何外部的依賴
-
SQLite事務是完全兼容ACID的,允許從多個進程或線程安全訪問
-
SQLite支持SQL92(SQL2)標准的大多數查詢語言的功能
-
SQLite使用ANSI-C編寫的,並提供了簡單和易於使用的API
-
SQLite可在UINX(Linux,Max OS-X,Android,iOS)和Windows(Win32,WinCE,WinRT)中運行
SQLite的局限性:
在SQLite中,SQL92不支持的特性如下所示:
RIGHT OUTER JOIN: 只實現了LEFT OUTER JOIN
FULL OUTER JOIN: 只實現了LEFT OUTER JOIN
ALTER TABLE: 支持RENAME TABLE和ALTER TABLE的ADD COLUMN variants命令,
不支持DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT
Trigger支持: 支持FOR EACH ROW觸發器,但不支持FOR EACH STATEMENT觸發器
VIEWS: 在SQLite中,視圖是只讀的,不能在視圖中執行DELETE、INSERT或UPDATE語句
GRANT 和 REVOKE:可以應用的唯一的訪問權限是底層操作系統的正常文件訪問權限
SQLite命令
與關系數據庫進行交互的標准SQLite命令類似於SQL。命令包括CREATE, SELECT, INSERT, UPDATE, DELETE和DROP。這些命令基於他們的操作性質分為以下幾種:
DDL-數據庫定義語言
CREATE:創建一個新的表,一個表的視圖,或者數據庫中的其他對象
ALTER:修改數據庫中的某個已有的數據庫對象,比如一個表
DROP:刪除整個表,或者表的視圖,或者數據庫中的其他對象
DML-數據庫操作語言
INSERT:創建一條記錄
UPDATE:修改記錄
DELETE:刪除記錄
DQL-數據查詢語言
SELECT:從一個或多個表中檢索某些記錄
SQLite3的下載與使用:
(1)下載:SQLite3是目前最新的SQLite版本。可以從http://www.sqlite.org/download.html網站上下載SQLite3的源代碼。下載完成后,解壓到某一盤符下。
(2)注意:SQLite3支持的基本數據類型主要有以下幾類:
1).NULL------------------blob
2).INTEGER---------------int
3).REAL------------------float、double
4).TEXT------------------char、varchar
5).NUMERIC---------------其余
(3)使用:
1)在Windows平台下,打開Dos窗口,切換到含有剛解壓的sqlite3.exe的目錄下,輸入 sqlite3 -version后回車,出現對應的版本號信息 :
2) 數據庫的使用與創建:假設需要使用一個test.db數據庫,只需在命令行下輸入 “sqlite3 test.db”即可,如果數據庫test.db已經存在,則命令“sqlite3 test.db”會在當前目錄下打開test.db。如果數據庫test.db不存在,則命會在當前目錄下新建數據庫test.db。為了提高效率,sqlite3並不會馬上創建test.db,而是等到第一個表創建完成后才會在物理上創建數據庫。
3)數據庫的查詢:使用“.database”命令可以查詢所在在使用的數據庫。
4)表創建:由於SQLite3是弱類型的數據庫,所以在create語句中並不要求給出列的類型(當然給出也不錯)。另外注意,所以的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(–)則代表注解,sqlite3會略過去。
5)數據庫的表查詢:使用命令“.table”可以查詢數據庫中的表有哪些。
6)插入
7)查詢
查詢所有:
按指定條件查詢和查詢指定字段:
模糊查詢:
8)更新:
9)刪除:
10)其他說明:
a.批量提交數據
sqlite> begin;
sqlite> insert into test_table values ('xiaoxue', 'female', 18);
sqlite> insert into test_table values ('xiaoliu', 'male', 20);
sqlite> commit;
b.設置主鍵,使用命令“paimary key”
注意:超出所定義的范圍和類型是沒有關系的
c.模糊查詢
1,% :表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
2,_ : 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
3,[ ] :表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。
比如 SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
將找出“張三”、“李三”、“王三”(而不是“張李王三”);
如 [ ] 內有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
將找出“老1”、“老2”、……、“老9”;
4,[^ ] :表示不在括號所列之內的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
比如 SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
d.SQLite內置命令:
見如下常用示例:
1). 備份和還原數據庫。
--在當前連接的main數據庫中創建一個數據表,之后再通過.backup命令將main數據庫備份到D:/mydb.db文件中。
sqlite> CREATE TABLE mytable (first_col integer);
sqlite> .backup 'D:/mydb.db'
sqlite> .exit
--通過在命令行窗口下執行sqlite3.exe以重新建立和SQLite的連接。
--從備份文件D:/mydb.db中恢復數據到當前連接的main數據庫中,再通過.tables命令可以看到mytable表。
sqlite> .restore 'D:/mydb.db'
sqlite> .tables
mytable
2). DUMP數據表的創建語句到指定文件。
--先將命令行當前的輸出重定向到D:/myoutput.txt,之后在將之前創建的mytable表的聲明語句輸出到該文件。
sqlite> .output D:/myoutput.txt
sqlite> .dump mytabl%
sqlite> .exit
--在DOS環境下用記事本打開目標文件。
D:\>notepad myoutput.txt
3). 顯示當前連接的所有Attached數據庫和main數據庫。
sqlite> ATTACH DATABASE 'D:/mydb.db' AS mydb;
sqlite> .databases
seq name file
--- --------------- ------------------------
0 main
2 mydb D:\mydb.db
4). 顯示main數據庫中的所有數據表。
sqlite> .tables
mytable
5). 顯示匹配表名mytabl%的數據表的所有索引。
sqlite> CREATE INDEX myindex on mytable(first_col);
sqlite> .indices mytabl%
myindex
6). 顯示匹配表名mytable%的數據表的Schema信息。
--依賴該表的索引信息也被輸出。
sqlite> .schema mytabl%
CREATE TABLE mytable (first_col integer);
CREATE INDEX myindex on mytable(first_col);
7). 格式化顯示SELECT的輸出信息。
--插入測試數據
sqlite> INSERT INTO mytable VALUES(1);
sqlite> INSERT INTO mytable VALUES(2);
sqlite> INSERT INTO mytable VALUES(3);
--請注意沒有任何設置時SELECT結果集的輸出格式。
sqlite> SELECT * FROM mytable;
1
2
3
--顯示SELECT結果集的列名。
--以列的形式顯示各個字段。
--將其后輸出的第一列顯示寬度設置為10.
sqlite> .header on
sqlite> .mode column
sqlite> .width 10
sqlite> SELECT * FROM mytable;
first_col
----------
1
2
3
e.找不到SQLite3.dll的解決辦法
直接拷貝SQLite3.dll文件到系統目錄里:
Windows NT/2000系統,把這個文件復制到c:\WINNT\System32目錄下。
Windows XP/WIN7系統,把這個文件復制到c:\Windows\System32目錄下。
Windows 95/98/Me系統,把這個文件復制到c:\Windows\System目錄下。
然后打開"開始-運行-輸入regsvr32 此文件名稱",再按回車錯誤就得以解決了!
說明:動態鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。
參考:https://blog.csdn.net/zhan_chi_ao_xiang/article/details/63260955