SQLite數據庫 簡介、特點、優勢、局限性及使用


SQLite簡介

SQLite是一個進程內的輕量級嵌入式數據庫,它的數據庫就是一個文件,實現了自給自足、無服務器、零配置的、事務性的SQL數據庫引擎。它是一個零配置的數據庫,這就體現出來SQLite與其他數據庫的最大的區別:SQLite不需要在系統中配置,直接可以使用。且SQLite不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite可直接訪問其存儲文件。

 

SQLite對於其他數據庫有什么優勢:

  • 不需要配置,不需要安裝和管理

  • 不需要一個單獨的服務器進程或操作的系統(無服務器的)

  • 一個完整的SQLite數據庫存儲在一個單一的跨平台的磁盤文件上

  • SQLite是非常小的,輕量級的數據庫,完全配置時小於400KiB,省略可選功能配置時小於250KiB

  • 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM