SQLite 學(xué)習(xí)筆記

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ě)敏感的,比如 GLOBglob 在 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)換不同格式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大小寫(xiě)敏感性 有個(gè)重要的點(diǎn)值得注意,SQLite 是不區(qū)分大小寫(xiě)的,但也有一些命令是大小寫(xiě)敏感的,比如 GLOB ...
    元茜姑娘閱讀 1,819評(píng)論 0 6
  • 一、優(yōu)點(diǎn) 1.不需要單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng);2.不需要配置安裝;3.輕量級(jí),無(wú)外部依賴(lài); 二、命令 crea...
    笨coco閱讀 429評(píng)論 0 0
  • 2017年10月17號(hào) 相博超媽媽 今天下班回來(lái)看到相博超在那認(rèn)認(rèn)真真的寫(xiě)作業(yè),我就做飯去了,寫(xiě)完作業(yè)吃完飯給...
    一年級(jí)四班相博超媽媽閱讀 186評(píng)論 0 0

友情鏈接更多精彩內(nèi)容