SQLite 簡(jiǎn)介
本教程幫助您了解什么是 SQLite,它與 SQL 之間的不同,為什么需要它,以及它的應(yīng)用程序數(shù)據(jù)庫(kù)處理方式。
SQLite是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。SQLite是一個(gè)增長(zhǎng)最快的數(shù)據(jù)庫(kù)引擎,這是在普及方面的增長(zhǎng),與它的尺寸大小無(wú)關(guān)。SQLite 源代碼不受版權(quán)限制。
什么是 SQLite?
SQLite是一個(gè)進(jìn)程內(nèi)的庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。它是一個(gè)零配置的數(shù)據(jù)庫(kù),這意味著與其他數(shù)據(jù)庫(kù)一樣,您不需要在系統(tǒng)中配置。
就像其他數(shù)據(jù)庫(kù),SQLite 引擎不是一個(gè)獨(dú)立的進(jìn)程,可以按應(yīng)用程序需求進(jìn)行靜態(tài)或動(dòng)態(tài)連接。SQLite 直接訪問(wèn)其存儲(chǔ)文件。
為什么要用 SQLite?
不需要一個(gè)單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng)(無(wú)服務(wù)器的)。
SQLite 不需要配置,這意味著不需要安裝或管理。
一個(gè)完整的 SQLite 數(shù)據(jù)庫(kù)是存儲(chǔ)在一個(gè)單一的跨平臺(tái)的磁盤(pán)文件。
SQLite 是非常小的,是輕量級(jí)的,完全配置時(shí)小于 400KiB,省略可選功能配置時(shí)小于250KiB。
SQLite 是自給自足的,這意味著不需要任何外部的依賴(lài)。
SQLite 事務(wù)是完全兼容 ACID 的,允許從多個(gè)進(jìn)程或線(xiàn)程安全訪問(wèn)。
SQLite 支持 SQL92(SQL2)標(biāo)準(zhǔn)的大多數(shù)查詢(xún)語(yǔ)言的功能。
SQLite 使用 ANSI-C 編寫(xiě)的,并提供了簡(jiǎn)單和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運(yùn)行。
SQLite 命令
與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn) SQLite 命令類(lèi)似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。這些命令基于它們的操作性質(zhì)可分為以下幾種:
DDL - 數(shù)據(jù)定義語(yǔ)言
|命令 |描述
| ------------- |:-------------:| -----:|
|CREATE |創(chuàng)建一個(gè)新的表,一個(gè)表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象。
|ALTER |修改數(shù)據(jù)庫(kù)中的某個(gè)已有的數(shù)據(jù)庫(kù)對(duì)象,比如一個(gè)表。
|DROP |刪除整個(gè)表,或者表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象。
DML - 數(shù)據(jù)操作語(yǔ)言
|命令 |描述
| --------|
|INSERT |創(chuàng)建一條記錄。
|UPDATE| 修改記錄。
|DELETE| 刪除記錄。
DQL - 數(shù)據(jù)查詢(xún)語(yǔ)言
|命令 |描述
| ----|
|SELECT| 從一個(gè)或多個(gè)表中檢索某些記錄。
SQLite 語(yǔ)法
SQLite 是遵循一套獨(dú)特的稱(chēng)為語(yǔ)法的規(guī)則和準(zhǔn)則。本教程列出了所有基本的 SQLite 語(yǔ)法,向您提供了一個(gè) SQLite 快速入門(mén)。
大小寫(xiě)敏感性
有個(gè)重要的點(diǎn)值得注意,SQLite 是不區(qū)分大小寫(xiě)的,但也有一些命令是大小寫(xiě)敏感的,比如 GLOB 和 glob 在 SQLite 的語(yǔ)句中有不同的含義。
注釋
SQLite 注釋是附加的注釋?zhuān)梢栽?SQLite 代碼中添加注釋以增加其可讀性,他們可以出現(xiàn)在任何空白處,包括在表達(dá)式內(nèi)和其他 SQL 語(yǔ)句的中間,但它們不能嵌套。
SQL 注釋以?xún)蓚€(gè)連續(xù)的 "-" 字符(ASCII 0x2d)開(kāi)始,并擴(kuò)展至下一個(gè)換行符(ASCII 0x0a)或直到輸入結(jié)束,以先到者為準(zhǔn)。
您也可以使用 C 風(fēng)格的注釋?zhuān)?"/" 開(kāi)始,并擴(kuò)展至下一個(gè) "/" 字符對(duì)或直到輸入結(jié)束,以先到者為準(zhǔn)。SQLite的注釋可以跨越多行。
sqlite>.help -- This is a single line comment
SQLite 語(yǔ)句
所有的 SQLite 語(yǔ)句可以以任何關(guān)鍵字開(kāi)始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的語(yǔ)句以分號(hào)(;)結(jié)束。
SQLite CREATE TABLE 語(yǔ)句:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
..... columnN datatype,
PRIMARY KEY( one or more columns ));
SQLite DROP TABLE 語(yǔ)句:
DROP TABLE database_name.table_name;
SQLite DELETE 語(yǔ)句:
DELETE FROM table_name
WHERE {CONDITION};
SQLite ALTER TABLE 語(yǔ)句:
ALTER TABLE table_name ADD COLUMN column_def...;
SQLite ALTER TABLE 語(yǔ)句(Rename):
ALTER TABLE table_name RENAME TO new_table_name;
SQLite ATTACH DATABASE 語(yǔ)句:
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 語(yǔ)句:
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 語(yǔ)句:
SELECT column1, column2....columnN
FROM table_name;
SQLite UPDATE 語(yǔ)句:
UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE CONDITION ];
SQLite WHERE 子句:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION;
SQLite 數(shù)據(jù)類(lèi)型
SQLite 數(shù)據(jù)類(lèi)型是一個(gè)用來(lái)指定任何對(duì)象的數(shù)據(jù)類(lèi)型的屬性。SQLite 中的每一列,每個(gè)變量和表達(dá)式都有相關(guān)的數(shù)據(jù)類(lèi)型。
您可以在創(chuàng)建表的同時(shí)使用這些數(shù)據(jù)類(lèi)型。SQLite 使用一個(gè)更普遍的動(dòng)態(tài)類(lèi)型系統(tǒng)。在 SQLite 中,值的數(shù)據(jù)類(lèi)型與值本身是相關(guān)的,而不是與它的容器相關(guān)。
SQLite 存儲(chǔ)類(lèi)
每個(gè)存儲(chǔ)在 SQLite 數(shù)據(jù)庫(kù)中的值都具有以下存儲(chǔ)類(lèi)之一:
|存儲(chǔ)類(lèi) |描述|
| -----|
|NULL |值是一個(gè) NULL 值。|
|INTEGER |值是一個(gè)帶符號(hào)的整數(shù),根據(jù)值的大小存儲(chǔ)在 1、2、3、4、6 或 8 字節(jié)中。|
|REAL |值是一個(gè)浮點(diǎn)值,存儲(chǔ)為 8 字節(jié)的 IEEE 浮點(diǎn)數(shù)字。|
|TEXT |值是一個(gè)文本字符串,使用數(shù)據(jù)庫(kù)編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲(chǔ)。|
|BLOB |值是一個(gè) blob 數(shù)據(jù),完全根據(jù)它的輸入存儲(chǔ)。|
SQLite 的存儲(chǔ)類(lèi)稍微比數(shù)據(jù)類(lèi)型更普遍。INTEGER 存儲(chǔ)類(lèi),例如,包含 6 種不同的不同長(zhǎng)度的整數(shù)數(shù)據(jù)類(lèi)型。
Boolean 數(shù)據(jù)類(lèi)型
SQLite 沒(méi)有單獨(dú)的 Boolean 存儲(chǔ)類(lèi)。相反,布爾值被存儲(chǔ)為整數(shù) 0(false)和 1(true)。
Date 與 Time 數(shù)據(jù)類(lèi)型
SQLite 沒(méi)有一個(gè)單獨(dú)的用于存儲(chǔ)日期和/或時(shí)間的存儲(chǔ)類(lèi),但 SQLite 能夠把日期和時(shí)間存儲(chǔ)為 TEXT、REAL 或 INTEGER 值。
|存儲(chǔ)類(lèi)| 日期格式|
| ------|
|TEXT |格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。|
|REAL |從公元前 4714 年 11 月 24 日格林尼治時(shí)間的正午開(kāi)始算起的天數(shù)。|
|INTEGER |從 1970-01-01 00:00:00 UTC 算起的秒數(shù)。|
您可以以任何上述格式來(lái)存儲(chǔ)日期和時(shí)間,并且可以使用內(nèi)置的日期和時(shí)間函數(shù)來(lái)自由轉(zhuǎn)換不同格式。