一. SQLite簡(jiǎn)介
SQLite是一個(gè)進(jìn)程內(nèi)的庫,實(shí)現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫引擎。它是一個(gè)零配置的數(shù)據(jù)庫,這意味著與其他數(shù)據(jù)庫不一樣,您不需要在系統(tǒng)中配置。
就像其他數(shù)據(jù)庫,SQLite 引擎不是一個(gè)獨(dú)立的進(jìn)程,可以按應(yīng)用程序需求進(jìn)行靜態(tài)或動(dòng)態(tài)連接。SQLite 直接訪問其存儲(chǔ)文件。
SQLite特點(diǎn)
- 不需要一個(gè)單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng)(無服務(wù)器的)。
- SQLite 不需要配置,這意味著不需要安裝或管理。
- 一個(gè)完整的 SQLite 數(shù)據(jù)庫是存儲(chǔ)在一個(gè)單一的跨平臺(tái)的磁盤文件。
- SQLite 是非常小的,是輕量級(jí)的,完全配置時(shí)小于 400KiB,省略可選功能配置時(shí)小于250KiB。
- SQLite 是自給自足的,這意味著不需要任何外部的依賴。
- SQLite 事務(wù)是完全兼容 ACID 的,允許從多個(gè)進(jìn)程或線程安全訪問。
- SQLite 支持 SQL92(SQL2)標(biāo)準(zhǔn)的大多數(shù)查詢語言的功能。
- SQLite 使用 ANSI-C 編寫的,并提供了簡(jiǎn)單和易于使用的 API。
- SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運(yùn)行。
二. 安裝SQLite
- 下載
https://www.sqlite.org/download.html 我們直接選擇預(yù)編譯版本就行了

安裝
創(chuàng)建文件夾 C:\sqlite,并在此文件夾下解壓上面兩個(gè)壓縮文件,將得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。創(chuàng)建環(huán)境變量
添加 C:\sqlite 到 PATH 環(huán)境變量測(cè)試環(huán)境
命令行輸入:sqlite3 --version可以查看版本信息 輸入sqlite3可以進(jìn)入sqlite3

三. SQLite 的點(diǎn)命令
如需獲取可用的點(diǎn)命令的清單,可以在任何時(shí)候輸入 ".help"

具體點(diǎn)命令
1. 退出 SQLite 提示符
.exit
.quit
2. 顯示各種設(shè)置的當(dāng)前值
.show
3. 開啟或關(guān)閉統(tǒng)計(jì)
.stats ON|OFF
#例如:
.stats ON
4. 超時(shí)時(shí)間
.timeout MS
5. 開啟或關(guān)閉頭部顯示
.header(s) ON|OFF
6. 設(shè)置輸出模式
.mode MODE
| MODE | 說明 |
|---|---|
| csv | CSV文件, 逗號(hào)分隔值的輸出 |
| column | 左對(duì)齊的列輸出 |
| html | HTML 的 <table> 代碼 |
| line | 每行一個(gè)值 |
| list | 由 .separator 字符串分隔的值 |
| tabs | 由 Tab 分隔的值 |
| insert | TABLE 表的 SQL 插入(insert)語句 |
| tcl | TCL 列表元素 |
7. 備份數(shù)據(jù)庫到文件
.backup ?DB? FILE
# 例如:
.backup main c:\sqlite
8. 發(fā)生錯(cuò)誤后是否停止
.bail ON|OFF
# 例如:
.bail ON
9. 列出數(shù)據(jù)庫的名稱及其所依附的文件
.databases
四. 數(shù)據(jù)庫操作
1. 創(chuàng)建數(shù)據(jù)庫
#在命令行中
sqlite3 students.db
# 或者在sqlite3命令行中:
.open students.db
# 存在則直接會(huì)打開,不存在就創(chuàng)建它。
五. 表操作
1. 創(chuàng)建表
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
- 可以使用 SQLIte 命令中的 .tables 命令來驗(yàn)證表是否已成功創(chuàng)建

- 可以使用
.schema查看創(chuàng)建信息 (也可以只查看單個(gè)的.schema SCHOOL)

關(guān)于每一列的約束.可以參考下表:
| 約束 | 說明 |
|---|---|
| NOT NULL | 確保某列不能有 NULL 值 |
| UNIQUE | 確保某列中的所有值是不同的 |
| PRIMARY KEY | 唯一標(biāo)識(shí)數(shù)據(jù)庫表中的各行/記錄 |
| DEFAULT | 當(dāng)某列沒有指定值時(shí),為該列提供默認(rèn)值 |
| AUTOINCREMENT | 自動(dòng)遞增 |
| CHECK | CHECK 約束確保某列中的所有值滿足一定條件 |
例如:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL UNIQUE,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00,
TAXRATE REAL CHECK(TAXRATE> 0)
);
2. 刪除表
DROP TABLE database_name.table_name;
#例如: DROP TABLE TEST

六. 數(shù)據(jù)操作
1. 插入數(shù)據(jù)(Insert 語句)
方法1: 要確保值的順序與列在表中的順序一致
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
方法2:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
在這里,column1, column2,...columnN 是要插入數(shù)據(jù)的表中的列的名稱。
例如
INSERT INTO STUDENT VALUES (1,'TOM',13,'tingshua');
2. 更新數(shù)據(jù)
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
例如:
UPDATE STUDENT SET AGE=16 WHERE NAME='TOM';
3. 刪除數(shù)據(jù)
DELETE FROM table_name
WHERE [condition];
七. 查詢操作
1. SELECT語句
SELECT * FROM table_name;
SELECT column1, column2, columnN FROM table_name;
2. 帶條件的查詢
SELECT * FROM STUDENT WHERE AGE>12;
SELECT * FROM STUDENT WHERE AGE%2 == 1;
SELECT * FROM STUDENT WHERE AGE IN (11,13);
SELECT * FROM STUDENT WHERE AGE BETWEEN 10 AND 15;
SELECT * FROM STUDENT WHERE NAME LIKE 'a%%';
下面是sqlite常用的運(yùn)算符



3. 方言LIMIT OFFSET
SQLite 的 LIMIT 子句用于限制由 SELECT 語句返回的數(shù)據(jù)數(shù)量。

4. 排序 ORDER BY
SQLite 的 ORDER BY 子句是用來基于一個(gè)或多個(gè)列按升序或降序順序排列數(shù)據(jù)。

5. 分組 GROUP BY
SQLite 的 GROUP BY 子句用于與 SELECT 語句一起使用,來對(duì)相同的數(shù)據(jù)進(jìn)行分組。
在 SELECT 語句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
假設(shè)我們有這樣一個(gè)表:

我們看到里面有三個(gè)James, 兩個(gè)paul , 我們可以把他們分別視為一組來統(tǒng)計(jì)

6. HAVING子句 (子篩選)
HAVING 子句允許指定條件來過濾將出現(xiàn)在最終結(jié)果中的分組結(jié)果。
WHERE 子句在所選列上設(shè)置條件,而 HAVING 子句則在由 GROUP BY 子句創(chuàng)建的分組上設(shè)置條件。

7. DISTINCT 消除所有重復(fù)
SQLite 的 DISTINCT 關(guān)鍵字與 SELECT 語句一起使用,來消除所有重復(fù)的記錄,并只獲取唯一一次記錄。
有可能出現(xiàn)一種情況,在一個(gè)表中有多個(gè)重復(fù)的記錄。當(dāng)提取這樣的記錄時(shí),DISTINCT 關(guān)鍵字就顯得特別有意義,它只獲取唯一一次記錄,而不是獲取重復(fù)記錄。
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]
八. 常用函數(shù)
1. COUNT 函數(shù)
COUNT 聚集函數(shù)是用來計(jì)算一個(gè)數(shù)據(jù)庫表中的行數(shù)。
SELECT COUNT(AGE) FROM STUDENT WHERE AGE>14;
2. MAX 函數(shù)
MAX 聚合函數(shù)允許我們選擇某列的最大值
SELECT MAX(salary) FROM COMPANY;
3. MIN 函數(shù)
MIN 聚合函數(shù)允許我們選擇某列的最小值
4. AVG 函數(shù)
SELECT AVG(salary) FROM COMPANY;
5. SUM 函數(shù)
SUM 聚合函數(shù)允許為一個(gè)數(shù)值列計(jì)算總和。
SELECT SUM(salary) FROM COMPANY;
6. ABS 函數(shù)
ABS 函數(shù)返回?cái)?shù)值參數(shù)的絕對(duì)值。
SELECT ABS(salary) FROM COMPANY;
7. UPPER 函數(shù) / LOWER 函數(shù)
UPPER 函數(shù)把字符串轉(zhuǎn)換為大寫字母。 / SQLite LOWER 函數(shù)把字符串轉(zhuǎn)換為小寫字母。
SELECT UPPER(NAME),AGE FROM STUDENT;
8. LENGTH 函數(shù)
LENGTH 函數(shù)返回字符串的長度。
SELECT UPPER(NAME),AGE FROM STUDENT WHERE LENGTH(NAME)=3;
九. 事務(wù)控制
1. 開始事務(wù)
BEGIN;
2. 提交事務(wù)
COMMIT;
3. 回滾事務(wù)
ROLLBACK;
