SQLite 學習筆記

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 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOBglob 在 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 算起的秒數。|

您可以以任何上述格式來存儲日期和時間,并且可以使用內置的日期和時間函數來自由轉換不同格式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 大小寫敏感性 有個重要的點值得注意,SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOB ...
    元茜姑娘閱讀 1,795評論 0 6
  • 一、優點 1.不需要單獨的服務器進程或操作的系統;2.不需要配置安裝;3.輕量級,無外部依賴; 二、命令 crea...
    笨coco閱讀 384評論 0 0
  • 2017年10月17號 相博超媽媽 今天下班回來看到相博超在那認認真真的寫作業,我就做飯去了,寫完作業吃完飯給...
    一年級四班相博超媽媽閱讀 167評論 0 0