(DDL)資料定義語言:
CMD
Description
CREATE
建立一個新的表,一個表的視圖,或者資料庫中的其他對象。
ALTER
修改資料庫中的某個已有的資料庫對象,比如一個表。
DROP
删除整個表,或者表的視圖,或者資料庫中的其他對象。
(DML)資料操作語言:
INSERT
建立一條記錄。
UPDATE
修改記錄。
DELETE
删除記錄。
(DQL)資料查詢語言:
SELECT
從一個或多個表中檢索某些記錄。
先看一張Windows下的截圖:

這是在Windows的cmd下運作sqlite3指令(如何安裝和配置煩請自行google | baidu),然後依據提示運作.help的列印(隻截圖一部分)。
可以發現sqlite的help列出來了所有sqlite支援的點指令,也可以發現,點指令不需要已”;”結尾。
我們對上面的.help指令進行翻譯大緻如下:
<code>.backup ?DB? FILE</code>
備份DB資料庫(預設是”main”)到FILE檔案。
<code>.bail ON/OFF</code>
發生錯誤後停止。預設為OFF。
<code>.databases</code>
列出附加資料庫的名稱和檔案。
<code>.dump ?TABLE?</code>
以SQL文本格式轉儲資料庫。如果指定了TABLE表,則隻轉儲比對LIKE模式的TABLE表。
<code>.echo ON/OFF</code>
開啟或關閉echo指令。
<code>.exit</code>
退出SQLite提示符。
<code>.explain ON/OFF</code>
開啟或關閉适合于EXPLAIN的輸出模式。如果沒有帶參數,則為EXPLAIN on,及開啟EXPLAIN。
<code>.header(s) ON/OFF</code>
開啟或關閉頭部顯示。
<code>.help</code>
顯示消息。
<code>.import FILE TABLE</code>
導入來自FILE檔案的資料到TABLE表中。
<code>.indices ?TABLE?</code>
顯示所有索引的名稱。如果指定了TABLE表,則隻顯示比對LIKE模式的TABLE表的索引。
<code>.load FILE ?ENTRY?</code>
加載一個擴充庫。
<code>.log FILE/off</code>
開啟或關閉日志。FILE檔案可以是stderr(标準錯誤)/stdout(标準輸出)。
<code>.mode MODE</code>
設定輸出模式,MODE可以是下列之一:csv 逗号分隔的值;column 左對齊的列;html HTML的<code><table></code>代碼;insert TABLE表的SQL插入(insert)語句;line 每行一個值;list 由 .separator字元串分隔的值;tabs 由Tab分隔的值;tcl TCL清單元素。
<code>.nullvalue STRING</code>
在NULL值的地方輸出STRING字元串。
<code>.output FILENAME</code>
發送輸出到FILENAME檔案。
<code>.output stdout</code>
發送輸出到螢幕。
<code>.print STRING...</code>
逐字地輸出STRING字元串。
<code>.prompt MAIN CONTINUE</code>
替換标準提示符。
<code>.quit</code>
<code>.read FILENAME</code>
執行FILENAME檔案中的SQL。
<code>.schema ?TABLE?</code>
顯示CREATE語句。如果指定了TABLE表,則隻顯示比對LIKE模式的TABLE表。
<code>.separator STRING</code>
改變輸出模式和.import所使用的分隔符。
<code>.show</code>
顯示各種設定的目前值。
<code>.stats ON/OFF</code>
開啟或關閉統計。
<code>.tables ?PATTERN?</code>
列出比對LIKE模式的表的名稱。
<code>.timeout MS</code>
嘗試打開鎖定的表MS微秒。
<code>.width NUM NUM</code>
為”column”模式設定列寬度。
<code>.timer ON/OFF</code>
開啟或關閉CPU定時器測量。
主表中儲存資料庫表的關鍵資訊,并把它命名為sqlite_master。如要檢視表概要,可如下操作:
SQLite是遵循一套獨特的稱為文法的規則和準則。
SQLite是不區分大小寫的,但也有一些指令是大小寫敏感的,比如GLOB和glob在SQLite的語句中有不同的含義。
SQLite 注釋是附加的注釋,可以在 SQLite 代碼中添加注釋以增加其可讀性,他們可以出現在任何空白處,包括在表達式内和其他 SQL 語句的中間,但它們不能嵌套。
SQL注釋以兩個連續的”-“字元開始,并擴充至下一個換行符或直到輸入結束,以先到者為準。也可以以”<code>/*"</code>開始,并擴充至下一個 “<code>*/</code>” 字元對或直到輸入結束,以先到者為準。SQLite的注釋可以跨越多行。
SQLite語句以任何關鍵字開始,以”;”結束。
SQLite資料類型是一個用來指定任何對象的資料類型的屬性。SQLite 中的每一列,每個變量和表達式都有相關的資料類型。您可以在建立表的同時使用這些資料類型。SQLite使用一個更普遍的動态類型系統。在SQLite 中,值的資料類型與值本身是相關的,而不是與它的容器相關。
SQLite有5個原始的資料類型,被稱為存儲類。存儲類這個詞表明了一個值在磁盤上存儲的格式,其實就是類型或資料類型的同義詞。如下即是存儲類:
存儲類
NULL
值是一個NULL值。
INTEGER
值是一個帶符号的整數,根據值的大小存儲在1、2、3、4、6 或8位元組中。
REAL
值是一個浮點值,存儲為8位元組的IEEE浮點數字。
TEXT
值是一個文本字元串,使用資料庫編碼(UTF-8、UTF-16BE或UTF-16LE)存儲。
BLOB
值是一個blob資料,完全根據它的輸入存儲。
SQLite通過值的表示法來判斷其類型,下面就是SQLite的推理方法:
SQL語句中用單引号或雙引号括起來的文字被指派為TEXT。
如果文字是未用引号括起來的資料,并且沒有小數點和指數,被指派為INTEGER。
如果文字是未用引号括起來的資料,并且帶有小數點或指數,被指派為REAL。
用NULL說明的值被指派為NULL存儲類。
如果一個值的格式為X’ABCD’,其中ABCD為16進制數字,則該值被指派為BLOB。X字首大小寫皆可。
如下就是驗證結果:
SQLite單獨的一個字段可能包含不同存儲類的值。
喜歡鑽牛角尖的這時候指定開始BB了,temp這一列資料類型不同,咋樣比較大小?咋樣排序等等?
經過查閱資料發現,具有不同存儲類的值可以存儲在同一個字段中。可以被排序,因為這些值可以互相比較。有完善定義的規則來做這件事。不同存儲類的值可以通過它們各自類的“類值”進行排序,定義如下:
NULL存儲類具有最低的類值。一個具有NULL存儲類的值比所有其它值都小(包括其它具有NULL存儲類的值)。在NULL值之間,沒有特别的可排序值。
INTEGER或REAL存儲類值高于NULL,它們的類值相等。INTEGER值和REAL值通過其數值進行比較。
TEXT存儲類的值比INTEGER和REAL高。數值永遠比字元串的值低。當兩個TEXT值進行比較時,其值大小由“排序法”決定。
BLOB存儲類具有最高的類值。具有BLOB類的值大于其它所有類的值。BLOB值之間在比較時使用C函數memcmp()。
是以,當SQLite對一個字段進行排序時,首先按存儲類排序,然後再進行類内的排序 (NULL類内部各值不必排序) 。
首先有如下SQL語句:
這裡的x、y和z這3個字段中存儲的是INTEGER, TEXT和REAL類型。
再看下面例子:
這裡的x、y和z這3個字段中存儲的是TEXT、TEXT和TEXT類型。
這裡的x、y和z這3個字段中存儲的是INTEGER、REAL和BLOB類型。
通過上面幾種寫法你會發現,可以為SQLite的字段定義類型,但這不是必須的,你可以盡管違反類型定義。這是因為在任何情況下,SQLite都可以接受一個值并推斷它的類型。
總之,SQLite的弱類型可表示為:
字段可以有類型。
類型可以通過值來推斷。
類型親和性介紹這兩個規定如何互相關聯。所謂類型親和性就是在強類型(strict typing)和動态類型(dynamic typing)之間的平衡藝術。
在SQLite中,字段沒有類型或域。當給一個字段聲明了類型,該字段實際上僅僅具有了該類型的親和性。聲明類型和類型親和性是兩回事。類型親和性 預定SQLite用什麼存儲類在字段中存儲值。在存儲一個給定的值時到底SQLite會在該字段中用什麼存儲類決定于值的存儲類和字段親和性的結合。
任何列可以存儲任何類型的資料,但列的首選存儲類是它的affinity。在SQLite3資料庫中,每個表的列配置設定為以下類型的affinity之一:
Affinity
該列使用存儲類NULL、TEXT或BLOB存儲所有資料。
NUMERIC
該列可以包含使用所有五個存儲類的值。
與帶有NUMERIC affinity的列相同,在CAST表達式中帶有異常。
與帶有NUMERIC affinity的列相似,不同的是,它會強制把整數值轉換為浮點表示。
NONE
帶有affinity NONE的列,不會優先使用哪個存儲類,也不會嘗試把資料從一個存儲類強制轉換為另一個存儲類。
下表列出了當建立SQLite3表時可使用的各種資料類型名稱,同時也顯示了相應的應用Affinity:
資料類型
INT、NTEGER、TINYINT、SMALLINT、MEDIUMINT、BIGINT、UNSIGNED BIG INT、INT2、INT8
CHARACTER(20)、VARCHAR(255)、VARYING CHARACTER(255)、NCHAR(55)、NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT、CLOB
BLOB、no datatype specified
REAL、DOUBLE、DOUBLE PRECISION、FLOAT
NUMERIC、DECIMAL(10,5)、BOOLEAN、DATE、DATETIME
Boolean資料類型
SQLite沒有單獨的Boolean存儲類,布爾值被存儲為整數 0(false)和 1(true)。
Date與Time資料類型
SQLite沒有一個單獨的用于存儲日期和/或時間的存儲類,但SQLite 能夠把日期和時間存儲為TEXT、REAL或 INTEGER值。您可以以任何上述格式來存儲日期和時間,并且可以使用内置的日期和時間函數來自由轉換不同格式。
日期格式
格式為”YYYY-MM-DD HH:MM:SS.SSS”的日期。
從公元前4714年11月24日格林尼治時間的正午開始算起的天數。
從1970-01-01 00:00:00 UTC算起的秒數。
字段類型和親和性
首先,每個字段都具有一種親和性。共有五種親和性:NUMERIC、INTEGER、REAL、TEXT和NONE。一個字段的親和性由它預聲明的類型決定。是以,當你為字段聲明了類型,從根本上說是為字段指定了親和性。SQLite按下面的規則為字段指派親和性:
預設的,一個字段預設的親和性是NUMERIC。如果一個字段不是INTEGER、TEXT、REAL或NONE的,那它自動地被指派為NUMERIC親和性。
如果為字段聲明的類型中包含了’INT’(無論大小寫),該字段被指派為INTEGER親和性。
如果為字段聲明的類型中包含了’CHAR’、’CLOB’或’TEXT’(無論大小寫),該字段被指派為TEXT親和性。如’VARCHAR’包含了’CHAR’,是以被指派為TEXT親和性。
如果為字段聲明的類型中包含了’BLOB’(無論大小寫),或者沒有為該字段聲明類型,該字段被指派為NONE親和性。
注意:如果沒有為字段聲明類型,該字段的親和性為NONE,在這種情況下,所有的值都将以它們本身的(或從它們的表示法中推斷的)存儲類存儲。如果 你暫時還不确定要往一個字段裡放什麼内容,或準備将來修改,用NONE親和性是一個好的選擇。但SQLite預設的親和性是NUMERIC。例如,如果為 一定字段聲明了類型JUJYFRUIT,該字段的親和性不是NONE,因為SQLite不認識這種類型,會給它指派預設的NUMERIC親和性。是以,與 其用一個不認識的類型最終得到NUMERIC親和性,還不如不為它指定類型,進而使它得到NONE親和性。
親和性和存儲
親和性對值如何存儲到字段有影響,規則如下:
一個NUMERIC字段可能包括所有5種存儲類。一個NUMERIC字段具有數字存儲類的偏好(INTEGER和REAL)。當一個TEXT值被 插入到一個NUMERIC字段,将會試圖将其轉化為INTEGER存儲類;如果轉化失敗,将會試圖将其轉化為REAL存儲類;如果還是失敗,将會用 TEXT存儲類來存儲。
一個INTEGER字段的處理很像NUMERIC字段。一個INTEGER字段會将REAL值按REAL存儲類存儲。也就是說,如果這個REAL 值沒有小數部分,就會被轉化為INTEGER存儲類。INTEGER字段将會試着将TEXT值按REAL存儲;如果轉化失敗,将會試圖将其轉化為 INTEGER存儲類;如果還是失敗,将會用TEXT存儲類來存儲。
一個TEXT字段将會把所有的INTEGER或REAL值轉化為TEXT。
一個NONE字段不試圖做任何類型轉化。所有值按它們本身的存儲類存儲。
沒有字段試圖向NULL或BLOB值轉化——如無論用什麼親和性。NULL和BLOB值永遠都按本來的方式存儲在所有字段。
這些規則初看起來比較複雜,但總的設計目标很簡單,如果你需要,SQLite會盡量模仿其它的關系型資料庫。也就是說,如果你将SQLite看成是 一個傳統資料庫,類型親和性将會按你的期望來存儲值。如果你聲明了一個INTEGER字段,并向裡面放一個整數,就會按整數來存儲。如果你聲明了一個具有 TEXT, CHAR或VARCHAR類型的字段并向裡放一個整數,整數将會轉化為TEXT。可是,如果你不遵守這些規定,SQLite也會找到辦法來存儲你的值。
如下例子展示了親和性是如何工作的:
存儲類和類型轉換
關于存儲類,需要關注的另一件事是存儲類有時會影響到值如何進行比較。特别是SQLite有時在進行比較之前,會将值在數字存儲類(INTEGER和REAL)和TEXT之間進行轉換。為進行二進制的比較,遵循如下規則:
當一個字段值與一個表達式的結果進行比較,字段的親和性會在比較之前應用于表達式的結果。
當兩個字段值進行比較,如果一個字段擁有INTEGER或NUMERIC親和性而另一個沒有,NUMERIC親和性會應用于非NUMERIC字段的TEXT值。
當兩個表達式進行比較,SQLite不做任何轉換。如果兩個表達式有相似的存儲類,則直接按它們的值進行比較;否則按類值進行比較。
這裡主要介紹了Sqlite的一些基本概念和資料類型的特性。關于Sqlite其他内容接下來文章繼續介紹。
本文轉自 一點點征服 部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/5237932.html,如需轉載請自行聯系原作者