玩轉(zhuǎn)SQLite7:基本語法與數(shù)據(jù)類型
已經(jīng)快速了解了SQLite的基本用法以及簡(jiǎn)單的Pyhton與C語言的API函數(shù)的使用。本篇再來全面介紹下SQLite的基本語法與數(shù)據(jù)類型。
1 SQLite 基本語法
1.1 SQLite注釋
- 單行注釋以兩個(gè)連續(xù)的橫杠:"--" 開始
- 多行注釋則與C風(fēng)格的:“/* */”一致
sqlite>.help -- 這是一個(gè)簡(jiǎn)單的注釋 sqlite>.help /* 這也是一個(gè)簡(jiǎn)單的注釋 */
1.2 SQLite大小寫
SQLite是不區(qū)分大小寫,比如select語句中,既可以使用大寫的SELECT,也可以用小寫的select。
但有例外:GLOB和glob在SQLite語句中有不同的含義。
1.3 SQLite語句/命令
SQLite 語句以關(guān)鍵字開始,以分號(hào);結(jié)束
關(guān)鍵字,也稱SQLite命令,如:SELECT,INSERT,UPDATE,DELETE,ALTER,DROP等,具體分類如下:
1.3.1 DDL - 數(shù)據(jù)定義語言
數(shù)據(jù)操作語言,即數(shù)據(jù)的增、刪、改數(shù)據(jù)庫在的數(shù)據(jù)表
命令 | 描述 |
---|---|
CREATE/create | 創(chuàng)建一個(gè)新的表,一個(gè)表的視圖,或者數(shù)據(jù)庫中的其他對(duì)象 |
ALTER/alter | 修改數(shù)據(jù)庫中的某個(gè)已有的數(shù)據(jù)庫對(duì)象,比如一個(gè)表 |
DROP/drop | 刪除整個(gè)表,或者表的視圖,或者數(shù)據(jù)庫中的其他對(duì)象 |
1.3.2 DML - 數(shù)據(jù)操作語言
數(shù)據(jù)操作語言,即對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行增、刪、改操作
命令 | 描述 |
---|---|
INSERT/insert | 創(chuàng)建一條記錄 |
DELETE/delete | 刪除記錄 |
UPDATE/update | 修改記錄 |
1.3.3 DQL - 數(shù)據(jù)查詢語言
數(shù)據(jù)操作語言,即對(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ù)庫中的值都具有以下存儲(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ù)庫編碼(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值被從磁盤讀出進(jìn)內(nèi)存處理,就被轉(zhuǎn)換成最一般的數(shù)據(jù)類型(8-字節(jié)有符號(hào)整形)。
對(duì)于BLOB數(shù)據(jù),它表示二進(jìn)制大對(duì)象,一般用來保存圖片,視頻等,另外還有CLOB,表示字符大對(duì)象,能夠存放大量基于字符的數(shù)據(jù)。
Boolean 數(shù)據(jù)類型
SQLite 沒有單獨(dú)的 Boolean 存儲(chǔ)類,它使用INTEGER作為存儲(chǔ)類型,布爾值被存儲(chǔ)為整數(shù) 0(false)和 1(true)。
Date 與 Time 數(shù)據(jù)類型
SQLite 沒有一個(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í)間的正午開始算起的天數(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中的格式包括:
-- 格式 格式說明 -- %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
通過SQLite語句,可以簡(jiǎn)單測(cè)試一些日期格式(打印當(dāng)前的時(shí)間):