標籤:
SQLite是一個軟體庫,實現了自給自足的、無伺服器的、零配置的、事務性的 SQL 資料庫引擎。SQLite是一個增長最快的資料庫引擎,這是在普及方面的增長,與它的尺寸大小無關。SQLite 原始碼不受著作權限制。
為什麼要用 SQLite?
不需要一個單獨的伺服器處理序或操作的系統(無伺服器的)。
SQLite 不需要配置,這意味著不需要安裝或管理。
一個完整的 SQLite 資料庫是儲存在一個單一的跨平台的磁碟檔案。
SQLite 是非常小的,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB。
SQLite 是自給自足的,這意味著不需要任何外部的依賴。
SQLite 事務是完全相容 ACID 的,允許從多個進程或安全執行緒訪問。
SQLite 支援 SQL92(SQL2)標準的大多數查詢語言的功能。
SQLite 使用 ANSI-C 編寫的,並提供了簡單和便於使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。
DDL - 資料定義語言 (Data Definition Language)
CREATE
建立一個新的表,一個表的視圖,或者資料庫中的其他對象。
ALTER
修改資料庫中的某個已有的資料庫物件,比如一個表。
DROP
刪除整個表,或者表的視圖,或者資料庫中的其他對象。
DML - 資料操作語言
INSERT
建立一條記錄。
UPDATE
修改記錄。
DELETE
刪除記錄。
DQL - 資料查詢語言
SELECT
從一個或多個表中檢索某些記錄。
SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOB 和 glob 在 SQLite 的語句中有不同的含義。
SQLite 注釋是附加的注釋,可以在 SQLite 代碼中添加註釋以增加其可讀性,他們可以出現在任何空白處,包括在運算式內和其他 SQL 陳述式的中間,但它們不能嵌套。
SQL 注釋以兩個連續的 "-" 字元(ASCII 0x2d)開始,並擴充至下一個分行符號(ASCII 0x0a)或直到輸入結束,以先到者為準。
您也可以使用 C 風格的注釋,以 "/*" 開始,並擴充至下一個 "*/" 字元對或直到輸入結束,以先到者為準。SQLite的注釋可以跨越多行。
SQLite 儲存類
每個儲存在 SQLite 資料庫中的值都具有以下儲存類之一:
NULL
值是一個 NULL 值。
INTEGER
值是一個帶符號的整數,根據值的大小儲存在 1、2、3、4、6 或 8 位元組中。
REAL
值是一個浮點值,儲存為 8 位元組的 IEEE 浮點數字。
TEXT
值是一個文本字串,使用資料庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)儲存。
BLOB
值是一個 blob 資料,完全根據它的輸入儲存。
SQLite 的儲存類稍微比資料類型更普遍。INTEGER 儲存類,例如,包含 6 種不同的不同長度的整數資料類型。
SQLite Affinity 類型
SQLite 支援列上的類型 affinity 概念。任何列仍然可以儲存任何類型的資料,但列的首選儲存類是它的 affinity。在 SQLite3 資料庫中,每個表的列分配為以下類型的 affinity 之一:
TEXT
該列使用儲存類 NULL、TEXT 或 BLOB 儲存所有資料。
NUMERIC
該列可以包含使用所有五個儲存類的值。
INTEGER
與帶有 NUMERIC affinity 的列相同,在 CAST 運算式中帶有異常。
REAL
與帶有 NUMERIC affinity 的列相似,不同的是,它會強制把整數值轉換為浮點表示。
NONE
帶有 affinity NONE 的列,不會優先使用哪個儲存類,也不會嘗試把資料從一個儲存類強制轉換為另一個儲存類。
SQLite Affinity 及類型名稱
下表列出了當建立 SQLite3 表時可使用的各種資料類型名稱,同時也顯示了相應的應用 Affinity:
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 |
INTEGER |
CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB |
TEXT |
BLOB no datatype specified |
NONE |
REAL DOUBLE DOUBLE PRECISION FLOAT |
REAL |
NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME |
NUMERIC |
Boolean 資料類型
SQLite 沒有單獨的 Boolean 儲存類。相反,布爾值被儲存為整數 0(false)和 1(true)。
Date 與 Time 資料類型
SQLite 沒有一個單獨的用於儲存日期和/或時間的儲存類,但 SQLite 能夠把日期和時間儲存為 TEXT、REAL 或 INTEGER 值。
儲存類
日期格式
TEXT
格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。
REAL
從公元前 4714 年 11 月 24 日格林尼治時間的正午開始算起的天數。
INTEGER
從 1970-01-01 00:00:00 UTC 算起的秒數。
您可以以任何上述格式來儲存日期和時間,並且可以使用內建的日期和時間函數來自由轉換不同格式。
SQLite 運算子是什嗎?
運算子是一個保留字或字元,主要用於 SQLite 語句的 WHERE 子句中執行操作,如比較和算術運算。
運算子用於指定 SQLite 語句中的條件,並在語句中串連多個條件。
SQLite 算術運算子
+
加法 - 把運算子兩邊的值相加
a + b 將得到 30
-
減法 - 左運算元減去右運算元
a - b 將得到 -10
*
乘法 - 把運算子兩邊的值相乘
a * b 將得到 200
/
除法 - 左運算元除以右運算元
b / a 將得到 2
%
模數 - 左運算元除以右運算元後得到的餘數
b % a will give 0
SQLite 比較子
==
檢查兩個運算元的值是否相等,如果相等則條件為真。
(a == b) 不為真。
=
檢查兩個運算元的值是否相等,如果相等則條件為真。
(a = b) 不為真。
!=
檢查兩個運算元的值是否相等,如果不相等則條件為真。
(a != b) 為真。
<>
檢查兩個運算元的值是否相等,如果不相等則條件為真。
(a <> b) 為真。
>
檢查左運算元的值是否大於右運算元的值,如果是則條件為真。
(a > b) 不為真。
<
檢查左運算元的值是否小於右運算元的值,如果是則條件為真。
(a < b) 為真。
>=
檢查左運算元的值是否大於等於右運算元的值,如果是則條件為真。
(a >= b) 不為真。
<=
檢查左運算元的值是否小於等於右運算元的值,如果是則條件為真。
(a <= b) 為真。
!<
檢查左運算元的值是否不小於右運算元的值,如果是則條件為真。
(a !< b) 為假。
!>
檢查左運算元的值是否不大於右運算元的值,如果是則條件為真。
(a !> b) 為真。
SQLite 邏輯運算子
AND
AND 運算子允許在一個 SQL 陳述式的 WHERE 子句中的多個條件的存在。
BETWEEN
BETWEEN 運算子用於在給定最小值和最大值範圍內的一系列值中搜尋值。
EXISTS
EXISTS 運算子用於在滿足一定條件的指定表中搜尋行的存在。
IN
IN 運算子用於把某個值與一系列指定列表的值進行比較。
NOT IN
IN 運算子的對立面,用於把某個值與不在一系列指定列表的值進行比較。
LIKE
LIKE 運算子用於把某個值與使用萬用字元運算子的相似值進行比較。
GLOB
GLOB 運算子用於把某個值與使用萬用字元運算子的相似值進行比較。GLOB 與 LIKE 不同之處在於,它是大小寫敏感的。
NOT
NOT 運算子是所用的邏輯運算子的對立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定運算子。
OR
OR 運算子用於結合一個 SQL 陳述式的 WHERE 子句中的多個條件。
IS NULL
NULL 運算子用於把某個值與 NULL 值進行比較。
IS
IS 運算子與 = 相似。
IS NOT
IS NOT 運算子與 != 相似。
||
串連兩個不同的字串,得到一個新的字串。
UNIQUE
UNIQUE 運算子搜尋指定表中的每一行,確保唯一性(無重複)。
SQLite 位元運算符
&
如果同時存在於兩個運算元中,二進位 AND 運算子複製一位到結果中。
(A & B) 將得到 12,即為 0000 1100
|
如果存在於任一運算元中,二進位 OR 運算子複製一位到結果中。
(A | B) 將得到 61,即為 0011 1101
~
二進位補碼運算子是一元運算子,具有"翻轉"位效應。
(~A ) 將得到 -61,即為 1100 0011,2 的補碼形式,帶符號的位元。
<<
二進位左移運算子。左運算元的值向左移動右運算元指定的位元。
A << 2 將得到 240,即為 1111 0000
>>
二進位右移運算子。左運算元的值向右移動右運算元指定的位元。
A >> 2 將得到 15,即為 0000 1111
LIKE 運算子是用來匹配萬用字元指定模式的文本值。如果搜尋運算式與模式運算式匹配,LIKE 運算子將返回真(true),也就是 1。這裡有兩個萬用字元與 LIKE 運算子一起使用:
百分比符號(%)代表零個、一個或多個數字或字元。底線(_)代表一個單一的數字或字元。這些符號可以被組合使用。
GLOB 運算子是用來匹配萬用字元指定模式的文本值。如果搜尋運算式與模式運算式匹配,GLOB 運算子將返回真(true),也就是 1。與 LIKE 運算子不同的是,GLOB 是大小寫敏感的,對於下面的萬用字元,它遵循 UNIX 的文法。
星號(*)代表零個、一個或多個數字或字元。問號(?)代表一個單一的數字或字元。這些符號可以被組合使用。
ORDER BY 子句是用來基於一個或多個列按升序或降序順序排列資料。
ORDER BY 子句的基本文法如下:
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
您可以在 ORDER BY 子句中使用多個列。確保您使用的排序列在列清單中。
GROUP BY 子句用於與 SELECT 語句一起使用,來對相同的資料進行分組。
在 SELECT 語句中,GROUP BY 子句放在 WHERE 子句之後,放在 ORDER BY 子句之前。
HAVING 子句允許指定條件來過濾將出現在最終結果中的分組結果。
WHERE 子句在所選列上設定條件,而 HAVING 子句則在由 GROUP BY 子句建立的分組上設定條件。
DISTINCT 關鍵字與 SELECT 語句一起使用,來消除所有重複的記錄,並只擷取唯一一次記錄。
有可能出現一種情況,在一個表中有多個重複的記錄。當提取這樣的記錄時,DISTINCT 關鍵字就顯得特別有意義,它只擷取唯一一次記錄,而不是擷取重複記錄
SQLite 基本知識