玩轉(zhuǎn)SQLite7:基本語(yǔ)法與數(shù)據(jù)類型
已經(jīng)快速了解了SQLite的基本用法以及簡(jiǎn)單的Pyhton與C語(yǔ)言的API函數(shù)的使用。本篇再來(lái)全面介紹下SQLite的基本語(yǔ)法與數(shù)據(jù)類型。
1 SQLite 基本語(yǔ)法
1.1 SQLite注釋
- 單行注釋以兩個(gè)連續(xù)的橫杠:"--" 開(kāi)始
- 多行注釋則與C風(fēng)格的:“/* */”一致
sqlite>.help -- 這是一個(gè)簡(jiǎn)單的注釋 sqlite>.help /* 這也是一個(gè)簡(jiǎn)單的注釋 */
1.2 SQLite大小寫(xiě)
SQLite是不區(qū)分大小寫(xiě),比如select語(yǔ)句中,既可以使用大寫(xiě)的SELECT,也可以用小寫(xiě)的select。
但有例外:GLOB和glob在SQLite語(yǔ)句中有不同的含義。
1.3 SQLite語(yǔ)句/命令
SQLite 語(yǔ)句以關(guān)鍵字開(kāi)始,以分號(hào);結(jié)束
關(guān)鍵字,也稱SQLite命令,如:SELECT,INSERT,UPDATE,DELETE,ALTER,DROP等,具體分類如下:
1.3.1 DDL - 數(shù)據(jù)定義語(yǔ)言
數(shù)據(jù)操作語(yǔ)言,即數(shù)據(jù)的增、刪、改數(shù)據(jù)庫(kù)在的數(shù)據(jù)表
| 命令 | 描述 |
|---|---|
| CREATE/create | 創(chuàng)建一個(gè)新的表,一個(gè)表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象 |
| ALTER/alter | 修改數(shù)據(jù)庫(kù)中的某個(gè)已有的數(shù)據(jù)庫(kù)對(duì)象,比如一個(gè)表 |
| DROP/drop | 刪除整個(gè)表,或者表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象 |
1.3.2 DML - 數(shù)據(jù)操作語(yǔ)言
數(shù)據(jù)操作語(yǔ)言,即對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行增、刪、改操作
| 命令 | 描述 |
|---|---|
| INSERT/insert | 創(chuàng)建一條記錄 |
| DELETE/delete | 刪除記錄 |
| UPDATE/update | 修改記錄 |
1.3.3 DQL - 數(shù)據(jù)查詢語(yǔ)言
數(shù)據(jù)操作語(yǔ)言,即對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行查操作
| 命令 | 描述 |
|---|---|
| SELECT/select | 從一個(gè)或多個(gè)表中檢索某些記錄 |
總結(jié)一下:
2 SQLite數(shù)據(jù)類型
SQLite存儲(chǔ)類
SQLite 中的每一列,每個(gè)變量和表達(dá)式都有相關(guān)的數(shù)據(jù)類型,每個(gè)存儲(chǔ)在 SQLite 數(shù)據(jù)庫(kù)中的值都具有以下存儲(chǔ)類之一:
| 存儲(chǔ)類 | 描述 |
|---|---|
| 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ǔ)類稍微比數(shù)據(jù)類型更普遍。
比如INTEGER存儲(chǔ)類,包含 6 種不同的不同長(zhǎng)度的整數(shù)數(shù)據(jù)類型,但只要INTEGER值被從磁盤(pán)讀出進(jìn)內(nèi)存處理,就被轉(zhuǎn)換成最一般的數(shù)據(jù)類型(8-字節(jié)有符號(hào)整形)。
對(duì)于BLOB數(shù)據(jù),它表示二進(jìn)制大對(duì)象,一般用來(lái)保存圖片,視頻等,另外還有CLOB,表示字符大對(duì)象,能夠存放大量基于字符的數(shù)據(jù)。
Boolean 數(shù)據(jù)類型
SQLite 沒(méi)有單獨(dú)的 Boolean 存儲(chǔ)類,它使用INTEGER作為存儲(chǔ)類型,布爾值被存儲(chǔ)為整數(shù) 0(false)和 1(true)。
Date 與 Time 數(shù)據(jù)類型
SQLite 沒(méi)有一個(gè)單獨(dú)的用于存儲(chǔ)日期和/或時(shí)間的存儲(chǔ)類,但內(nèi)置的sqlite日期和時(shí)間函數(shù)能夠?qū)⑷掌诤蜁r(shí)間以TEXT,REAL或INTEGER形式存放數(shù)能夠?qū)⑷掌诤蜁r(shí)間以TEXT,REAL或INTEGER形式存放。
| 存儲(chǔ)類 | 日期格式 |
|---|---|
| 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ù)。 |
內(nèi)置的日期和時(shí)間函數(shù)包括:
| 函數(shù) | 含義 |
|---|---|
| date(timestring, modifier, modifier, ...) | 以 YYYY-MM-DD 格式返回日期 |
| time(timestring, modifier, modifier, ...) | 以 HH:MM:SS 格式返回時(shí)間 |
| datetime(timestring, modifier, modifier, ...) | 以 YYYY-MM-DD HH:MM:SS 格式返回 |
| julianday(timestring, modifier, modifier, ...) | 這將返回從格林尼治時(shí)間的公元前 4714 年 11 月 24 日正午算起的天數(shù) |
| strftime(format, timestring, modifier, modifier, ...) | 這將根據(jù)第一個(gè)參數(shù)指定的格式字符串返回格式化的日期 |
- 第一個(gè)參數(shù)(timestring):時(shí)間字符串
- 后面的參數(shù)(modifier):修飾符
- strftime() 函數(shù)可以把格式字符串format作為其第一個(gè)參數(shù)
前四個(gè)個(gè)函數(shù)也可以轉(zhuǎn)換成strftime函數(shù):
date(...) strftime('%Y-%m-%d', ...)
time(...) strftime('%H:%M:%S', ...)
datetime(...) strftime('%Y-%m-%d %H:%M:%S', ...)
julianday(...) strftime('%J', ...)
strftime中的格式包括:
-- 格式 格式說(shuō)明 -- %d 天數(shù),例如:01-31中某一個(gè)天 -- %f 帶小數(shù)部分(SS.SSS格式)的秒 -- %H 小時(shí),例如:00-23中某一個(gè)小時(shí) -- %j 一年中的第幾天,001-366 -- %J 儒略日數(shù),DDDD.DDDD -- %m 月,00-12中某一具體月份 -- %M 分,00-59 -- %s 從 1970-01-01 算起的秒數(shù) -- %S 秒,00-59 -- %w 一周中的第幾天,0-6 (0 is Sunday) -- %W 一年中的第幾周,01-53 -- %Y 年,YYYY -- %% % symbol
通過(guò)SQLite語(yǔ)句,可以簡(jiǎn)單測(cè)試一些日期格式(打印當(dāng)前的時(shí)間):





