SQLite數據庫 簡介、特色、優點、侷限性及使用

SQLite簡介html

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

 

SQLite對於其餘數據庫有什麼優點:sql

  • 不須要配置,不準愛安裝和管理數據庫

  • 不須要一個單獨的服務器進程或操做的系統(無服務器的)安全

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

  • SQLite是很是小的,輕量級的數據庫,徹底配置時小於400KiB,省略可選功能配置時小於250KiB函數

  • SQLite是一個自給自足的數據庫,這也就意味着不須要任何外部的依賴測試

  • SQLite事務是徹底兼容ACID的,容許從多個進程或線程安全訪問網站

  •  SQLite支持SQL92(SQL2)標準的大多數查詢語言的功能spa

  • 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 '[張李王]三'
將找出「張三」、「李三」、「王三」(而不是「張李王三」);

如 [ ] 內有一系列字符(0123四、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 是一個包含可由多個程序同時使用的代碼和數據的庫。

參考:http://www.javashuo.com/article/p-fpajyrzc-bc.html

相關文章
相關標籤/搜索