九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Sqlite的Sql語(yǔ)法(三) [轉(zhuǎn)自www.sqlite.com.cn] - 宇鶴敬文的日志 - 網(wǎng)易博客

Sqlite的Sql語(yǔ)法(三) [轉(zhuǎn)自www.sqlite.com.cn]

Sqlite2009-06-29 22:22:25閱讀5評(píng)論0字號(hào):

INSERT

sql-statement ::= INSERT [OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] VALUES(value-list) |
INSERT
[OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] select-statement

INSERT語(yǔ)句有兩種基本形式。一種帶有"VALUES"關(guān)鍵字,在已有表中插入一個(gè)新的行。若不定義字段列表,那么值的數(shù)目將與表中的字段數(shù)目相同。否則值的數(shù)目須與字段列表中的字段數(shù)目相同。不在字段列表中的字段被賦予缺省值或NULL(當(dāng)未定義缺省值)。

INSERT的第二種形式從SELECT語(yǔ)句中獲取數(shù)據(jù)。若未定義字段列表,則從SELECT得到的字段的數(shù)目必須與表中的字段數(shù)目相同,否則應(yīng)與定義的字段列表中的字段數(shù)目相同。SELECT的每一行結(jié)果在表中插入一個(gè)新的條目。SELECT可以是簡(jiǎn)單的或者復(fù)合的。如果SELECT語(yǔ)句帶有ORDERBY子句,ORDER BY會(huì)被忽略。

在使用這一命令時(shí),利用可選的ON CONFLICT子句可以定義替代的約束沖突判定算法。更多信息,參見 ON CONFLICT 。為了兼容MySQL,可以使用REPLACE代替"INSERT OR REPLACE".

ON CONFLICT子句

 

conflict-clause ::= ON CONFLICT conflict-algorithm
conflict-algorithm ::= ROLLBACK | ABORT | FAIL | IGNORE | REPLACE

ON CONFLICT子句不是獨(dú)立的SQL命令。這是一條可以出現(xiàn)在許多其他SQL命令中的非標(biāo)準(zhǔn)的子句。由于它并不是標(biāo)準(zhǔn)的SQL語(yǔ)言,這里單獨(dú)介紹它。

ONCONFLICT子句的語(yǔ)法在如上的CREATE TABLE命令中示出。對(duì)于INSERT和UPDATE,關(guān)鍵詞"ONCONFLICT"由"OR"替代,這樣語(yǔ)法顯得自然。例如,不用寫"INSERT ON CONFLICT IGNORE"而是"INSERT ORIGNORE".二者表示相同的意思。

ON CONFLICT子句定義了解決約束沖突的算法。有五個(gè)選擇:ROLLBACK, ABORT, FAIL, IGNORE, 和REPLACE.缺省方案是ABORT.選項(xiàng)含義如下:

ROLLBACK

當(dāng)發(fā)生約束沖突,立即ROLLBACK,即結(jié)束當(dāng)前事務(wù)處理,命令中止并返回SQLITE_CONSTRAINT代碼。若當(dāng)前無(wú)活動(dòng)事務(wù)(除了每一條命令創(chuàng)建的默認(rèn)事務(wù)以外),則該算法與ABORT相同。

ABORT

當(dāng)發(fā)生約束沖突,命令收回已經(jīng)引起的改變并中止返回SQLITE_CONSTRAINT。但由于不執(zhí)行ROLLBACK,所以前面的命令產(chǎn)生的改變將予以保留。缺省采用這一行為。

FAIL

當(dāng)發(fā)生約束沖突,命令中止返回SQLITE_CONSTRAINT。但遇到?jīng)_突之前的所有改變將被保留。例如,若一條UPDATE語(yǔ)句在100行遇到?jīng)_突100th,前99行的改變將被保留,而對(duì)100行或以后的改變將不會(huì)發(fā)生。

IGNORE

當(dāng)發(fā)生約束沖突,發(fā)生沖突的行將不會(huì)被插入或改變。但命令將照常執(zhí)行。在沖突行之前或之后的行將被正常的插入和改變,且不返回錯(cuò)誤信息。

REPLACE

當(dāng)發(fā)生UNIQUE約束沖突,先存在的,導(dǎo)致沖突的行在更改或插入發(fā)生沖突的行之前被刪除。這樣,更改和插入總是被執(zhí)行。命令照常執(zhí)行且不返回錯(cuò)誤信息。當(dāng)發(fā)生NOT NULL約束沖突,導(dǎo)致沖突的NULL值會(huì)被字段缺省值取代。若字段無(wú)缺省值,執(zhí)行ABORT算法。

當(dāng)沖突應(yīng)對(duì)策略為滿足約束而刪除行時(shí),它不會(huì)調(diào)用刪除觸發(fā)器。但在新版中這一特性可能被改變。

INSERT或UPDATE的OR子句定義的算法會(huì)覆蓋CREATE TABLE所定義的。ABORT算法將在沒有定義任何算法時(shí)缺省使用。

SQLite支持的編譯指令(pragma)

PRAGMA命令是用于修改SQlite庫(kù)或查詢SQLite庫(kù)內(nèi)部數(shù)據(jù)(non-table)的特殊命令。PRAGMA 命令使用與其它SQLite命令(e.g. SELECT, INSERT)相同的接口,但在如下重要方面與其它命令不同:

  • 在未來(lái)的SQLite版本中部分pragma可能被刪除或添加,小心使用。
  • 當(dāng)使用未知的pragma語(yǔ)句時(shí)不產(chǎn)生報(bào)錯(cuò)。未知的pragma僅僅會(huì)被忽略,即是說(shuō)若是打錯(cuò)了pragma語(yǔ)句SQLite不會(huì)提示用戶。
  • 一 些pragma在SQL編譯階段生效而非執(zhí)行階段。即是說(shuō)若使用C語(yǔ)言的sqlite3_compile(), sqlite3_step(), sqlite3_finalize() API (或類似的封裝接口中),pragma可能在調(diào)用sqlite3_compile()期間起作用。
  • pragma命令不與其它SQL引擎兼容。

可用的pragma命令有如下四個(gè)基本類型:


PRAGMA命令語(yǔ)法

 

sql-statement ::= PRAGMA name [= value] |
PRAGMA
function(arg)

使用整數(shù)值value的pragma也可以使用符號(hào)表示,字符串"on", "true",和 "yes" 等同于1,"off", "false",和 "no"等同于0. 這些字符串大小寫不敏感且無(wú)須進(jìn)行引用。無(wú)法識(shí)別的字符串被當(dāng)作1且不會(huì)報(bào)錯(cuò)。value返回時(shí)是整數(shù)。


用于修改SQLite庫(kù)的操作的Pragma

  • PRAGMA auto_vacuum;
    PRAGMA auto_vacuum =
    0 | 1;

    查詢或設(shè)置數(shù)據(jù)庫(kù)的auto-vacuum標(biāo)記。

    正常情況下,當(dāng)提交一個(gè)從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)的事務(wù)時(shí),數(shù)據(jù)庫(kù)文件不改變大小。未使用的文件頁(yè)被標(biāo)記并在以后的添加操作中 再次使用。這種情況下使用VACUUM命令釋放刪除得到的空間。

    當(dāng)開啟auto-vacuum,當(dāng)提交一個(gè)從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)的事務(wù)時(shí),數(shù)據(jù)庫(kù)文件自動(dòng)收縮, (VACUUM命令在auto-vacuum開啟的數(shù)據(jù)庫(kù)中不起作用)。數(shù)據(jù)庫(kù)會(huì)在內(nèi)部存儲(chǔ)一些信息以便支持這一功能,這使得 數(shù)據(jù)庫(kù)文件比不開啟該選項(xiàng)時(shí)稍微大一些。

    只有在數(shù)據(jù)庫(kù)中未建任何表時(shí)才能改變auto-vacuum標(biāo)記。試圖在已有表的情況下修改不會(huì)導(dǎo)致報(bào)錯(cuò)。

  • PRAGMA cache_size;
    PRAGMA cache_size =
    Number-of-pages;

    查詢或修改SQLite一次存儲(chǔ)在內(nèi)存中的數(shù)據(jù)庫(kù)文件頁(yè)數(shù)。每頁(yè)使用約1.5K內(nèi)存,缺省的緩存大小是2000. 若需要使用改變大量多行的UPDATE或DELETE命令,并且不介意SQLite使用更多的內(nèi)存的話,可以增大緩存以提高性能。

    當(dāng)使用cache_size pragma改變緩存大小時(shí),改變僅對(duì)當(dāng)前對(duì)話有效,當(dāng)數(shù)據(jù)庫(kù)關(guān)閉重新打開時(shí)緩存大小恢復(fù)到缺省大小。 要想永久改變緩存大小,使用default_cache_size pragma.

  • PRAGMA case_sensitive_like;
    PRAGMA case_sensitive_like =
    0 | 1;

    LIKE運(yùn)算符的缺省行為是忽略latin1字符的大小寫。因此在缺省情況下'a' LIKE 'A'的值為真??梢酝ㄟ^(guò)打開 case_sensitive_like pragma來(lái)改變這一缺省行為。當(dāng)啟用case_sensitive_like,'a' LIKE 'A'為假而 'a' LIKE 'a'依然為真。

  • PRAGMA count_changes;
    PRAGMA count_changes =
    0 | 1;

    查 詢或更改count-changes標(biāo)記。正常情況下INSERT, UPDATE和DELETE語(yǔ)句不返回?cái)?shù)據(jù)。 當(dāng)開啟count-changes,以上語(yǔ)句返回一行含一個(gè)整數(shù)值的數(shù)據(jù)——該語(yǔ)句插入,修改或刪除的行數(shù)。 返回的行數(shù)不包括由觸發(fā)器產(chǎn)生的插入,修改或刪除等改變的行數(shù)。

  • PRAGMA default_cache_size;
    PRAGMA default_cache_size =
    Number-of-pages;

    查詢或修改SQLite一次存儲(chǔ)在內(nèi)存中的數(shù)據(jù)庫(kù)文件頁(yè)數(shù)。每頁(yè)使用約1.5K內(nèi)存,它與 cache_sizepragma類似,只是它永久性地改變緩存大小。 利用該pragma,你可以設(shè)定一次緩存大小,并且每次重新打開數(shù)據(jù)庫(kù)時(shí)都繼續(xù)使用該值。

  • PRAGMA default_synchronous;

    該語(yǔ)句在2.8版本中可用,但在3.0版中被去掉了。這條pragma很危險(xiǎn)且不推薦使用,安全起見在該文檔中不涉及此pragma的用法。

  • PRAGMA empty_result_callbacks;
    PRAGMA empty_result_callbacks =
    0 | 1;

    查詢或更改empty-result-callbacks標(biāo)記。

    empty- result-callbacks標(biāo)記僅僅影響sqlite3_exec API函數(shù)。正常情況下,empty-result-callbacks標(biāo)記清空, 則對(duì)返回0行數(shù)據(jù)的命令不調(diào)用sqlite3_exec()的回叫函數(shù),當(dāng)設(shè)置了empty-result-callbacks,則調(diào)用回叫 函數(shù)一次,置第三個(gè)參數(shù)為0 (NULL).這使得使用sqlite3_exec() API的程序即使在一條查詢不返回?cái)?shù)據(jù)時(shí)依然檢索字段名。

  • PRAGMA encoding;
    PRAGMA encoding = "UTF-8";
    PRAGMA encoding = "UTF-16";
    PRAGMA encoding = "UTF-16le";
    PRAGMA encoding = "UTF-16be";

    在 第一種形式中,若主數(shù)據(jù)庫(kù)已創(chuàng)建,這條pragma返回主數(shù)據(jù)庫(kù)使用得文本編碼格式,為 "UTF-8", "UTF-16le" (little-endian UTF-16 encoding) 或者"UTF-16be" (big-endian UTF-16 encoding)中的一種。 若主數(shù)據(jù)庫(kù)未創(chuàng)建,返回值為當(dāng)前會(huì)話創(chuàng)建的主數(shù)據(jù)庫(kù)將要使用的文本編碼格式。

    第二種及以后幾種形式只在主數(shù)據(jù)庫(kù)未創(chuàng)建時(shí)有效。這時(shí)該pragma設(shè)置當(dāng)前會(huì)話創(chuàng)建的主數(shù)據(jù)庫(kù)將要使用的文本編碼格式。 "UTF-16"表示"使用本機(jī)字節(jié)順序的UTF-16編碼"。若這些形式在主數(shù)據(jù)庫(kù)創(chuàng)建后使用,將被忽略且不產(chǎn)生任何效果。

    數(shù)據(jù)庫(kù)的編碼格式設(shè)置后不能夠被改變。

    ATTACH命令創(chuàng)建的數(shù)據(jù)庫(kù)使用與主數(shù)據(jù)庫(kù)相同的編碼格式。

  • PRAGMA full_column_names;
    PRAGMA full_column_names =
    0 | 1;

    查詢或更改the full-column-names標(biāo)記。該標(biāo)記影響SQLite命名SELECT語(yǔ)句(當(dāng)字段表達(dá)式為表-字段或通配符"*"時(shí)) 返回的字段名的方式。正常情況下,當(dāng)SELECT語(yǔ)句將兩個(gè)或多個(gè)表連接時(shí), 這類結(jié)果字段的返回名為

    ,當(dāng)SELECT語(yǔ)句查詢一個(gè)單獨(dú)的表時(shí), 返回字段名為。當(dāng)設(shè)置了full-column-names標(biāo)記,返回的字段名將統(tǒng)一為
    不管是否對(duì)表進(jìn)行了連接。

    若short-column-names和full-column-names標(biāo)記同時(shí)被設(shè)置,則使用full-column-names方式。

  • PRAGMA fullfsync
    PRAGMA fullfsync =
    0 | 1;

    查詢或更改fullfsync標(biāo)記。該標(biāo)記決定是否在支持的系統(tǒng)上使用F_FULLFSYNC同步模式。缺省值為off.截至目前(2006-02-10) 只有Mac OS X 系統(tǒng)支持F_FULLFSYNC.

  • PRAGMA page_size;
    PRAGMA page_size =
    bytes;

    查詢或設(shè)置page-size值。只有在未創(chuàng)建數(shù)據(jù)庫(kù)時(shí)才能設(shè)置page-size。頁(yè)面大小必須是2的整數(shù)倍且大于等于512小于等于8192。 上限可以通過(guò)在編譯時(shí)修改宏定義SQLITE_MAX_PAGE_SIZE的值來(lái)改變。上限的上限是32768.

  • PRAGMA read_uncommitted;
    PRAGMA read_uncommitted =
    0 | 1;

    查 詢,設(shè)置或清除READ UNCOMMITTED isolation(讀取未授權(quán)的分隔符).缺省的SQLite分隔符等級(jí)是SERIALIZABLE. 任何線程或進(jìn)程可選用READ UNCOMMITTED isolation,但除了共享公共頁(yè)和schema緩存的連接之間以外的地方也會(huì) 使用SERIALIZABLE.緩存共享通過(guò) sqlite3_enable_shared_cache() API開啟,且只在運(yùn)行同一線程的連接間有效。缺省情況下緩存共享是關(guān)閉的。

  • PRAGMA short_column_names;
    PRAGMA short_column_names =
    0 | 1;

    查詢或更改the short-column-names標(biāo)記。該標(biāo)記影響SQLite命名SELECT語(yǔ)句(當(dāng)字段表達(dá)式為表-字段或通配符"*"時(shí)) 返回的字段名的方式。正常情況下,當(dāng)SELECT語(yǔ)句將兩個(gè)或多個(gè)表連接時(shí), 這類結(jié)果字段的返回名為

    ,當(dāng)SELECT語(yǔ)句查詢一個(gè)單獨(dú)的表時(shí), 返回字段名為。當(dāng)設(shè)置了full-column-names標(biāo)記,返回的字段名將統(tǒng)一為
    不管是否對(duì)表進(jìn)行了連接。

    若short-column-names和full-column-names標(biāo)記同時(shí)被設(shè)置,則使用full-column-names方式。

  • PRAGMA synchronous;
    PRAGMA synchronous = FULL;
    (2)
    PRAGMA synchronous = NORMAL;
    (1)
    PRAGMA synchronous = OFF;
    (0)

    查 詢或更改"synchronous"標(biāo)記的設(shè)定。第一種形式(查詢)返回整數(shù)值。 當(dāng)synchronous設(shè)置為FULL (2), SQLite數(shù)據(jù)庫(kù)引擎在緊急時(shí)刻會(huì)暫停以確定數(shù)據(jù)已經(jīng)寫入磁盤。 這使系統(tǒng)崩潰或電源出問(wèn)題時(shí)能確保數(shù)據(jù)庫(kù)在重起后不會(huì)損壞。FULL synchronous很安全但很慢。 當(dāng)synchronous設(shè)置為NORMAL, SQLite數(shù)據(jù)庫(kù)引擎在大部分緊急時(shí)刻會(huì)暫停,但不像FULL模式下那么頻繁。 NORMAL模式下有很小的幾率(但不是不存在)發(fā)生電源故障導(dǎo)致數(shù)據(jù)庫(kù)損壞的情況。但實(shí)際上,在這種情況 下很可能你的硬盤已經(jīng)不能使用,或者發(fā)生了其他的不可恢復(fù)的硬件錯(cuò)誤。 設(shè)置為synchronous OFF (0)時(shí),SQLite在傳遞數(shù)據(jù)給系統(tǒng)以后直接繼續(xù)而不暫停。若運(yùn)行SQLite的應(yīng)用程序崩潰, 數(shù)據(jù)不會(huì)損傷,但在系統(tǒng)崩潰或?qū)懭霐?shù)據(jù)時(shí)意外斷電的情況下數(shù)據(jù)庫(kù)可能會(huì)損壞。另一方面,在synchronous OFF時(shí) 一些操作可能會(huì)快50倍甚至更多。

    在SQLite 2中,缺省值為NORMAL.而在3中修改為FULL.

  • PRAGMA temp_store;
    PRAGMA temp_store = DEFAULT;
    (0)
    PRAGMA temp_store = FILE;
    (1)
    PRAGMA temp_store = MEMORY;
    (2)

    查詢或更改"temp_store"參數(shù)的設(shè)置。當(dāng)temp_store設(shè)置為DEFAULT (0),使用編譯時(shí)的C預(yù)處理宏 TEMP_STORE來(lái)定義儲(chǔ)存臨時(shí)表和臨時(shí)索引的位置。當(dāng)設(shè)置為MEMORY (2)臨時(shí)表和索引存放于內(nèi)存中。 當(dāng)設(shè)置為FILE (1)則存放于文件中。temp_store_directory pragma 可用于指定存放該文件的目錄。當(dāng)改變temp_store設(shè)置,所有已存在的臨時(shí)表,索引,觸發(fā)器及視圖將被立即刪除。

    庫(kù)中的編譯時(shí)C預(yù)處理標(biāo)志TEMP_STORE可以覆蓋該pragma設(shè)置。下面的表給出TEMP_STORE預(yù)處理宏和 temp_store pragma交互作用的總結(jié):

    TEMP_STORE PRAGMA
    temp_store
    臨時(shí)表和索引
    使用的存儲(chǔ)方式
    0 any 文件
    1 0 文件
    1 1 文件
    1 2 內(nèi)存
    2 0 內(nèi)存
    2 1 文件
    2 2 內(nèi)存
    3 any 內(nèi)存

  • PRAGMA temp_store_directory;
    PRAGMA temp_store_directory = 'directory-name';

    查詢或更改"temp_store_directory"設(shè)置——存儲(chǔ)臨時(shí)表和索引的文件所在的目錄。 僅在當(dāng)前連接有效,在建立新連接時(shí)重置為缺省值。

    當(dāng)改變了temp_store_directory設(shè)置,所有已有的臨時(shí)表,索引,觸發(fā)器,視圖會(huì)被直接刪除。 建議在數(shù)據(jù)庫(kù)一打開時(shí)就設(shè)置好temp_store_directory.

    directory-name需用單引號(hào)引起來(lái)。要想恢復(fù)缺省目錄,把directory-name設(shè)為空字符串。例如 PRAGMA temp_store_directory = ''.若directory-name未找到或不可寫會(huì)引發(fā)錯(cuò)誤。

    臨時(shí)文件的缺省目錄與主機(jī)的系統(tǒng)有關(guān),使用Unix/Linux/OSX系統(tǒng)的主機(jī),缺省目錄是如下序列之中第一個(gè)可寫的 /var/tmp, /usr/tmp, /tmp,current-directory.對(duì)于Windows NT,缺省目錄由Windows決定,一般為 C:\Documents and Settings\user-name\Local Settings\Temp\. SQLite創(chuàng)建的臨時(shí)文件在使用完畢時(shí)就被unlink,所以操作系統(tǒng)可以在SQLite進(jìn)程進(jìn)行中自動(dòng)刪除臨時(shí)文件。 于是,正常情況下不能通過(guò)lsdir命令看到臨時(shí)文件。


用于查詢數(shù)據(jù)庫(kù)的schema的Pragma

  • PRAGMA database_list;

    對(duì)每個(gè)打開的數(shù)據(jù)庫(kù),使用該數(shù)據(jù)庫(kù)的信息調(diào)用一次回叫函數(shù)。使用包括附加的數(shù)據(jù)庫(kù)名和索引名在內(nèi)的參數(shù)。第一行用于主數(shù)據(jù)庫(kù),第二行用于存放臨時(shí)表的臨時(shí)數(shù)據(jù)庫(kù)。

  • PRAGMA foreign_key_list(table-name);

    對(duì)于參數(shù)表中每個(gè)涉及到字段的外鍵,使用該外鍵的信息調(diào)用一次回叫函數(shù)。每個(gè)外鍵中的每個(gè)字段都將調(diào)用一次回叫函數(shù)。

  • PRAGMA index_info(index-name);

    對(duì)該索引涉及到的每個(gè)字段,使用字段信息(字段名,字段號(hào))調(diào)用一次回叫函數(shù)。

  • PRAGMA index_list(table-name);

    對(duì)表中的每個(gè)索引,使用索引信息調(diào)用回叫函數(shù)。參數(shù)包括索引名和一個(gè)指示索引是否唯一的標(biāo)志。

  • PRAGMA table_info(table-name);

    對(duì)于表中的每個(gè)字段,使用字段信息(字段名,數(shù)據(jù)類型,可否為空,缺省值)調(diào)用回叫函數(shù)。


用于查詢/更改版本信息的Pragma

  • PRAGMA [database.]schema_version;
    PRAGMA [database.]schema_version =
    integer ;
    PRAGMA [database.]user_version;
    PRAGMA [database.]user_version =
    integer ;

    這兩條pragma分別用于設(shè)置schema-version和user-version的值。schema-version 和user-version均為32位有符號(hào)整數(shù),存放于數(shù)據(jù)庫(kù)頭中。

    schema- version通常只由SQLite內(nèi)部操作。每當(dāng)數(shù)據(jù)庫(kù)的schema改變時(shí)(創(chuàng)建或撤消表或索引),SQLite 將這個(gè)值增大。schema版本在每一次query被執(zhí)行時(shí)被SQLite所使用,以確定編譯SQL query時(shí)內(nèi)部cache的schema與編譯后的query實(shí)際執(zhí)行時(shí)數(shù)據(jù)庫(kù)的schema相匹配。使用"PRAGMA schema_version"更改schema-version會(huì)破壞這一機(jī)制,有導(dǎo)致程序崩潰或數(shù)據(jù)庫(kù)損壞的潛在危險(xiǎn)。請(qǐng)小心使用!

    user-version不在SQLite內(nèi)部使用,任何程序可以用它來(lái)做任何事。


用于庫(kù)debug的Pragma

  • PRAGMA integrity_check;

    該命令對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行完整性檢查,查找次序顛倒的記錄,丟失的頁(yè),殘缺的記錄以及損壞的索引。若發(fā)現(xiàn)任何問(wèn)題則返回一形容問(wèn)題所在的字符串,若一切正常返回"ok".

  • PRAGMA parser_trace = ON; (1)
    PRAGMA parser_trace = OFF;
    (0)

    打開或關(guān)閉SQLite庫(kù)中的SQL語(yǔ)法分析追蹤,用于debug.只有當(dāng)SQLite不使用NDEBUG宏進(jìn)行編譯時(shí)該pragma才可用。

  • PRAGMA vdbe_trace = ON; (1)
    PRAGMA vdbe_trace = OFF;
    (0)

    打開或關(guān)閉SQLite庫(kù)中的虛擬數(shù)據(jù)庫(kù)引擎追蹤,用于debug.更多信息,察看 VDBE文檔

  • PRAGMA vdbe_listing = ON; (1)
    PRAGMA vdbe_listing = OFF;
    (0)

    打開或關(guān)閉虛擬機(jī)程序列表,當(dāng)開啟列表功能,整個(gè)程序的內(nèi)容在執(zhí)行前被打印出來(lái),就像在每條語(yǔ)句之前自動(dòng)執(zhí)行EXPLAIN. 語(yǔ)句在打印列表之后正常執(zhí)行。用于debug.更多信息,察看 VDBE文檔。

REINDEX

 

sql-statement ::= REINDEX collation name
sql-statement ::= REINDEX [database-name .] table/index-name

REINDEX命令用于刪除并從草稿重建索引。當(dāng)比較順序改變時(shí)該命令顯得很有效。

在第一種形式中,所有附加數(shù)據(jù)庫(kù)中使用該比較順序的索引均被重建。在第二種形式中, [database-name.]table/index-name標(biāo)識(shí)出一個(gè)表,所有關(guān)聯(lián)該表的索引被重建。若標(biāo)識(shí)出索引,則僅僅該索引被刪除并重建。

若不指定database-name而指定表/索引名以及比較順序,只有關(guān)聯(lián)該比較順序的索引被重建。在重建索引時(shí)總是指定database-name可以消除這一歧義。

REPLACE

 

sql-statement ::= REPLACE INTO [database-name .] table-name [( column-list )] VALUES ( value-list ) |
REPLACE INTO
[database-name .] table-name [( column-list )] select-statement

REPLACE命令用于替代INSERT的"INSERT OR REPLACE"變體,以更好的兼容MySQL。查看 INSERT命令文檔獲取更多信息。

SELECT

 

sql-statement ::= SELECT [ALL | DISTINCT] result [FROM table-list]
[WHERE expr]
[GROUP BY expr-list]
[HAVING expr]
[compound-op select]*
[ORDER BY sort-expr-list]
[LIMIT integer [( OFFSET | , ) integer]]
result ::= result-column [, result-column]*
result-column ::= * | table-name . * | expr [ [AS] string ]
table-list ::= table [join-op table join-args]*
table ::= table-name [AS alias] |
(
select ) [AS alias]
join-op ::= , | [NATURAL] [LEFT | RIGHT | FULL] [OUTER | INNER | CROSS] JOIN
join-args ::= [ON expr] [USING ( id-list )]
sort-expr-list ::= expr [sort-order] [, expr [sort-order]]*
sort-order ::= [ COLLATE collation-name ] [ ASC | DESC ]
compound_op ::= UNION | UNION ALL | INTERSECT | EXCEPT

SELECT語(yǔ)句用于查詢數(shù)據(jù)庫(kù)。一條SELECT命令的返回結(jié)果是零或多行每行有固定字段數(shù)的數(shù)據(jù)。字段的數(shù)目由在SELECT和FROM之間的表達(dá)式列表定義。任意的表達(dá)式都可以被用作結(jié)果。若表達(dá)式是 *則表示所有表的所有字段。若表達(dá)式是表的名字后接.*則結(jié)果為該表中的所有字段。

DISTINCT關(guān)鍵字的使用會(huì)使返回的結(jié)果是原結(jié)果的一個(gè)不含相同行的子集。NULL值被認(rèn)為是相同的。缺省行為是返回所有的行,為清楚起見可以使用關(guān)鍵字ALL。

查詢對(duì)FROM之后定義的一個(gè)或多個(gè)表進(jìn)行。若多個(gè)表用逗號(hào)連接,則查詢針對(duì)它們的交叉連接。所有的SQL-92連接語(yǔ)法均可以用于定義連接。圓括號(hào)中的副查詢可能被FROM子句中的任意表名替代。當(dāng)結(jié)果中僅有一行包含表達(dá)式列表中的結(jié)果的行時(shí),整個(gè)的FROM子句會(huì)被忽略。

WHERE子句可以限定查詢操作的行數(shù)目。

GROUP BY子句將一行或多行結(jié)果合成單行輸出。當(dāng)結(jié)果有聚集函數(shù)時(shí)這將尤其有用。GROUP BY子句的表達(dá)式不須是出現(xiàn)在結(jié)果中的表達(dá)式。HAVING子句與WHERE相似,只是HAVING用于過(guò)濾分組創(chuàng)建的行。HAVING子句可能包含值,甚至是不出現(xiàn)在結(jié)果中的聚集函數(shù)。

ORDERBY子句對(duì)所得結(jié)果根據(jù)表達(dá)式排序。表達(dá)式無(wú)須是簡(jiǎn)單SELECT的結(jié)果,但在復(fù)合SELECT中每個(gè)表達(dá)式必須精確對(duì)應(yīng)一個(gè)結(jié)果字段。每個(gè)表達(dá)式可能跟隨一個(gè)可選的COLLATE關(guān)鍵字以及用于排序文本的比較函數(shù)名稱和/或關(guān)鍵字ASC或DESC,用于說(shuō)明排序規(guī)則。

LIMIT子句限定行數(shù)的最大值。負(fù)的LIMIT表示無(wú)上限。后跟可選的OFFSET說(shuō)明跳過(guò)結(jié)果集中的前多少行。在一個(gè)復(fù)合查詢中,LIMIT子句只允許出現(xiàn)在最終SELECT語(yǔ)句中。限定對(duì)于所有的查詢均適用,而不僅僅是添加了LIMIT子句的那一行。注意OFFSET關(guān)鍵字用于LIMIT子句中,則限制值是第一個(gè)數(shù)字,而偏移量(offset)是第二個(gè)數(shù)字。若用逗號(hào)替代OFFSET關(guān)鍵字,則偏移量是第一個(gè)數(shù)字而限制值是第二個(gè)數(shù)字。這是為了加強(qiáng)對(duì)遺留的SQL數(shù)據(jù)庫(kù)的兼容而有意造成的矛盾。

復(fù)合的SELECT由兩個(gè)或更多簡(jiǎn)單SELECT經(jīng)由UNION, UNION ALL,INTERSECT,EXCEPT中的一個(gè)運(yùn)算符連接而成。在一個(gè)復(fù)合SELECT中,各個(gè)SELECT需指定相同個(gè)數(shù)的結(jié)果字段。僅允許一個(gè)ORDERBY子句出現(xiàn)在SELECT的末尾。UNION和UNIONALL運(yùn)算符從左至右將所有SELECT的結(jié)果合成一個(gè)大的表。二者的區(qū)別在于UNION的所有結(jié)果行是不相同的而 UNIONALL允許重復(fù)行。INTERSECT運(yùn)算符取左右兩個(gè)SELECT結(jié)果的交。EXCEPT從左邊SELECT的結(jié)果中除掉右邊SELECT的結(jié)果。三個(gè)或更多SELECT復(fù)合時(shí),它們從左至右結(jié)合。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SQLite的SQL語(yǔ)法
SQL在Excel中的應(yīng)用方法
MySQL的基礎(chǔ)語(yǔ)法
第一天
mysql
MySQL數(shù)據(jù)庫(kù)基礎(chǔ)學(xué)習(xí)筆記(一)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服