SQLite 簡介
本教程幫助您了解什么是 SQLite,它與 SQL 之間的不同,為什么需要它,以及它的應用程序數據庫處理方式。
SQLite是一個軟件庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。SQLite是一個增長最快的數據庫引擎,這是在普及方面的增長,與它的尺寸大小無關。SQLite 源代碼不受版權限制。
什么是 SQLite?
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)中運行。
SQLite 命令
與關系數據庫進行交互的標準 SQLite 命令類似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。這些命令基于它們的操作性質可分為以下幾種:
DDL - 數據定義語言
|命令 |描述
| ------------- |:-------------:| -----:|
|CREATE |創建一個新的表,一個表的視圖,或者數據庫中的其他對象。
|ALTER |修改數據庫中的某個已有的數據庫對象,比如一個表。
|DROP |刪除整個表,或者表的視圖,或者數據庫中的其他對象。
DML - 數據操作語言
|命令 |描述
| --------|
|INSERT |創建一條記錄。
|UPDATE| 修改記錄。
|DELETE| 刪除記錄。
DQL - 數據查詢語言
|命令 |描述
| ----|
|SELECT| 從一個或多個表中檢索某些記錄。
SQLite 語法
SQLite 是遵循一套獨特的稱為語法的規則和準則。本教程列出了所有基本的 SQLite 語法,向您提供了一個 SQLite 快速入門。
大小寫敏感性
有個重要的點值得注意,SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOB 和 glob 在 SQLite 的語句中有不同的含義。
注釋
SQLite 注釋是附加的注釋,可以在 SQLite 代碼中添加注釋以增加其可讀性,他們可以出現在任何空白處,包括在表達式內和其他 SQL 語句的中間,但它們不能嵌套。
SQL 注釋以兩個連續的 "-" 字符(ASCII 0x2d)開始,并擴展至下一個換行符(ASCII 0x0a)或直到輸入結束,以先到者為準。
您也可以使用 C 風格的注釋,以 "/" 開始,并擴展至下一個 "/" 字符對或直到輸入結束,以先到者為準。SQLite的注釋可以跨越多行。
sqlite>.help -- This is a single line comment
SQLite 語句
所有的 SQLite 語句可以以任何關鍵字開始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的語句以分號(;)結束。
SQLite CREATE TABLE 語句:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
..... columnN datatype,
PRIMARY KEY( one or more columns ));
SQLite DROP TABLE 語句:
DROP TABLE database_name.table_name;
SQLite DELETE 語句:
DELETE FROM table_name
WHERE {CONDITION};
SQLite ALTER TABLE 語句:
ALTER TABLE table_name ADD COLUMN column_def...;
SQLite ALTER TABLE 語句(Rename):
ALTER TABLE table_name RENAME TO new_table_name;
SQLite ATTACH DATABASE 語句:
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';
SQLite EXISTS 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name EXISTS (SELECT * FROM table_name );
SQLite BETWEEN 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name BETWEEN val-1 AND val-2;
SQLite AND/OR 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQLite COUNT 子句:
SELECT COUNT(column_name)
FROM table_name
WHERE CONDITION;
SQLite GROUP BY 子句:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITIONGROUP BY column_name;
SQLite HAVING 子句:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name
HAVING (arithematic function condition);
SQLite INSERT INTO 語句:
INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);
SQLite IN 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name IN (val-1, val-2,...val-N);
SQLite Like 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name LIKE { PATTERN };
SQLite NOT IN 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name NOT IN (val-1, val-2,...val-N);
SQLite ORDER BY 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITIONORDER BY column_name {ASC|DESC};
SQLite SELECT 語句:
SELECT column1, column2....columnN
FROM table_name;
SQLite UPDATE 語句:
UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE CONDITION ];
SQLite WHERE 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION;
SQLite 數據類型
SQLite 數據類型是一個用來指定任何對象的數據類型的屬性。SQLite 中的每一列,每個變量和表達式都有相關的數據類型。
您可以在創建表的同時使用這些數據類型。SQLite 使用一個更普遍的動態類型系統。在 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 種不同的不同長度的整數數據類型。
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 算起的秒數。|
您可以以任何上述格式來存儲日期和時間,并且可以使用內置的日期和時間函數來自由轉換不同格式。