解析SQLite中的常見(jiàn)問(wèn)題與總結(jié)詳解
更新時(shí)間:2013年05月16日 15:40:16 作者:
本篇文章是對(duì)SQLite中的常見(jiàn)問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
1、 創(chuàng)建數(shù)據(jù)
如果不往數(shù)據(jù)庫(kù)里面添加任何的表,這個(gè)數(shù)據(jù)庫(kù)等于沒(méi)有建立,不會(huì)在硬盤上產(chǎn)生任何文件,如果數(shù)據(jù)庫(kù)已經(jīng)存在,則會(huì)打開(kāi)這個(gè)數(shù)據(jù)庫(kù)。
2、 如何通過(guò)sqlite3.dll與sqlite3.def生成sqlite3.lib文件
LIB /DEF:sqlite3.def /machine:IX86
3、 sqlite3_open打開(kāi)一個(gè)數(shù)據(jù)庫(kù)時(shí),如果數(shù)據(jù)庫(kù)不存在就會(huì)新生成一個(gè)數(shù)據(jù)庫(kù)文件。如果接著執(zhí)行其他查詢語(yǔ)句就會(huì)失敗,比如sqlite3_prepare,編程中出現(xiàn)明明指定了數(shù)據(jù)庫(kù)而且里面也有數(shù)據(jù),為什么查詢失敗了,主要是數(shù)據(jù)庫(kù)名路徑不對(duì)引起的。一般的做法是先檢查數(shù)據(jù)庫(kù)文件是否存在,如果存在就使用sqlite3_open打開(kāi)數(shù)據(jù)庫(kù);否則創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。
4、 如何建立自動(dòng)增長(zhǎng)字段
聲明為INTEGER PRIMARY KEY的列將會(huì)自動(dòng)增長(zhǎng)。
5、SQLite3支持何種數(shù)據(jù)類型?
NULL
INTEGER
REAL
TEXT
BLOB
但實(shí)際上,sqlite3也接受如下的數(shù)據(jù)類型:
smallint 16位元的整數(shù)。
interger 32位元的整數(shù)。
decimal(p,s) p精確值和s大小的十進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)點(diǎn)後有幾位數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)設(shè)為p=5; s=0。
float 32位元的實(shí)數(shù)。
double 64位元的實(shí)數(shù)。
char(n) n長(zhǎng)度的字串,n不能超過(guò)254。
varchar(n)長(zhǎng)度不固定且其最大長(zhǎng)度為n的字串,n不能超過(guò)4000。
graphic(n)和char(n)一樣,不過(guò)其單位是兩個(gè)字元double-bytes,n不能超過(guò)127。這個(gè)形態(tài)是為了支援兩個(gè)字元長(zhǎng)度的字體,例如中文字。
vargraphic(n)可變長(zhǎng)度且其最大長(zhǎng)度為n的雙字元字串,n不能超過(guò)2000。
date包含了年份、月份、日期。
time包含了小時(shí)、分鐘、秒。
timestamp包含了年、月、日、時(shí)、分、秒、千分之一秒。
6、SQLite允許向一個(gè)integer型字段中插入字符串
這是一個(gè)特性,而不是一個(gè)bug。SQLite不強(qiáng)制數(shù)據(jù)類型約束。任何數(shù)據(jù)都可以插入任何列。你可以向一個(gè)整型列中插入任意長(zhǎng)度的字符串,向布爾型列中插入浮點(diǎn)數(shù),或者向字符型列中插入日期型值。在CREATE TABLE中所指定的數(shù)據(jù)類型不會(huì)限制在該列中插入任何數(shù)據(jù)。任何列均可接受任意長(zhǎng)度的字符串(只有一種情況除外:標(biāo)志為INTEGER PRIMARY KEY的列只能存儲(chǔ)64位整數(shù),當(dāng)向這種列中插數(shù)據(jù)除整數(shù)以外的數(shù)據(jù)時(shí),將會(huì)產(chǎn)生錯(cuò)誤。
但SQLite確實(shí)使用聲明的列類型來(lái)指示你所期望的格式。所以,例如你向一個(gè)整型列中插入字符串時(shí),SQLite會(huì)試圖將該字符串轉(zhuǎn)換成一個(gè)整數(shù)。如果可以轉(zhuǎn)換,它將插入該整數(shù);否則,將插入字符串。這種特性有時(shí)被稱為類型或列親和性(type or column affinity).
7、為什么SQLite不允許在同一個(gè)表不同的兩行上使用0和0.0作主鍵?
主鍵必須是數(shù)值類型,將主鍵改為TEXT型將不起作用。
每一行必須有一個(gè)唯一的主鍵。對(duì)于一個(gè)數(shù)值型列,SQLite認(rèn)為'0'和'0.0'是相同的,因?yàn)樗麄冊(cè)谧鳛檎麛?shù)比較時(shí)是相等的(參見(jiàn)上一問(wèn)題)。所以,這樣值就不唯一了。
8、多個(gè)應(yīng)用程序或一個(gè)應(yīng)用程序的多個(gè)實(shí)例可以同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)文件嗎?
多個(gè)進(jìn)程可同時(shí)打開(kāi)同一個(gè)數(shù)據(jù)庫(kù)。多個(gè)進(jìn)程可以同時(shí)進(jìn)行SELECT操作,但在任一時(shí)刻,只能有一個(gè)進(jìn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行更改。
SQLite使用讀、寫鎖控制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。(在Win95/98/ME等不支持讀、寫鎖的系統(tǒng)下,使用一個(gè)概率性的模擬來(lái)代替。)但使用時(shí)要注意:如果數(shù)據(jù)庫(kù)文件存放于一個(gè)NFS文件系統(tǒng)上,這種鎖機(jī)制可能不能正常工作。這是因?yàn)閒cntl()文件鎖在很多NFS上沒(méi)有正確的實(shí)現(xiàn)。在可能有多個(gè)進(jìn)程同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,應(yīng)該避免將數(shù)據(jù)庫(kù)文件放到NFS上。在Windows上,Microsoft的文檔中說(shuō):如果使用FAT文件系統(tǒng)而沒(méi)有運(yùn)行share.exe守護(hù)進(jìn)程,那么鎖可能是不能正常使用的。那些在Windows上有很多經(jīng)驗(yàn)的人告訴我:對(duì)于網(wǎng)絡(luò)文件,文件鎖的實(shí)現(xiàn)有好多Bug,是靠不住的。如果他們說(shuō)的是對(duì)的,那么在兩臺(tái)或多臺(tái)Windows機(jī)器間共享數(shù)據(jù)庫(kù)可能會(huì)引起不期望的問(wèn)題。
我們意識(shí)到,沒(méi)有其它嵌入式的SQL數(shù)據(jù)庫(kù)引擎能象SQLite這樣處理如此多的并發(fā)。SQLite允許多個(gè)進(jìn)程同時(shí)打開(kāi)一個(gè)數(shù)據(jù)庫(kù),同時(shí)讀一個(gè)數(shù)據(jù)庫(kù)。當(dāng)有任何進(jìn)程想要寫時(shí),它必須在更新過(guò)程中鎖住數(shù)據(jù)庫(kù)文件。但那通常只是幾毫秒的時(shí)間。其它進(jìn)程只需等待寫進(jìn)程干完活結(jié)束。典型地,其它嵌入式的SQL數(shù)據(jù)庫(kù)引擎同時(shí)只允許一個(gè)進(jìn)程連接到數(shù)據(jù)庫(kù)。
但是,Client/Server數(shù)據(jù)庫(kù)引擎(如PostgreSQL, MySQL,或Oracle)通常支持更高級(jí)別的并發(fā),并且允許多個(gè)進(jìn)程同時(shí)寫同一個(gè)數(shù)據(jù)庫(kù)。這種機(jī)制在Client/Server結(jié)構(gòu)的數(shù)據(jù)庫(kù)上是可能的,因?yàn)榭偸怯幸粋€(gè)單一的服務(wù)器進(jìn)程很好地控制、協(xié)調(diào)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。如果你的應(yīng)用程序需要很多的并發(fā),那么你應(yīng)該考慮使用一個(gè)Client/Server結(jié)構(gòu)的數(shù)據(jù)庫(kù)。但經(jīng)驗(yàn)表明,很多應(yīng)用程序需要的并發(fā),往往比其設(shè)計(jì)者所想象的少得多。
當(dāng)SQLite試圖訪問(wèn)一個(gè)被其它進(jìn)程鎖住的文件時(shí),缺省的行為是返回SQLITE_BUSY。可以在C代碼中使用sqlite3_busy_handler()或sqlite3_busy_timeout() API函數(shù)調(diào)整這一行為。
9、SQLite線程安全嗎?
線程是魔鬼(Threads are evil)。避免使用它們。
SQLite是線程安全的。由于很多用戶會(huì)忽略我們?cè)谏弦欢沃薪o出的建議,我們做出了這種讓步。但是,為了達(dá)到線程安全,SQLite在編譯時(shí)必須將SQLITE_THREADSAFE預(yù)處理宏置為1。在Windows和Linux上,已編譯的好的二進(jìn)制發(fā)行版中都是這樣設(shè)置的。如果不確定你所使用的庫(kù)是否是線程安全的,可以調(diào)用sqlite3_threadsafe()接口找出。
10、在SQLite數(shù)據(jù)庫(kù)中如何列出所有的表和索引?
如果你運(yùn)行sqlite3命令行來(lái)訪問(wèn)你的數(shù)據(jù)庫(kù),可以鍵入“.tables”來(lái)獲得所有表的列表?;蛘?,你可以輸入“.schema”來(lái)看整個(gè)數(shù)據(jù)庫(kù)模式,包括所有的表的索引。輸入這些命令,后面跟一個(gè)LIKE模式匹配可以限制顯示的表。
11、SQLite數(shù)據(jù)庫(kù)有已知的大小限制嗎?
在Windows和Unix下,版本2.7.4的SQLite可以達(dá)到2的41次方字節(jié)(2T字節(jié))。老版本的為2的31次方字節(jié)(2G字節(jié))。
SQLite版本2.8限制一個(gè)記錄的容量為1M。SQLite版本3.0則對(duì)單個(gè)記錄容量沒(méi)有限制。
表名、索引表名、視圖名、觸發(fā)器名和字段名沒(méi)有長(zhǎng)度限制。但SQL函數(shù)的名稱(由sqlite3_create_function() API函數(shù)創(chuàng)建)不得超過(guò)255個(gè)字符。
12、在SQLite中,VARCHAR字段最長(zhǎng)是多少?
SQLite不強(qiáng)制VARCHAR的長(zhǎng)度。你可以在SQLITE中聲明一個(gè)VARCHAR(10),SQLite還是可以很高興地允許你放入500個(gè)字符。并且這500個(gè)字符是原封不動(dòng)的,它永遠(yuǎn)不會(huì)被截?cái)唷?BR>
13、在SQLite中,如何在一個(gè)表上添加或刪除一列?
SQLite有有限地ALTER TABLE支持。你可以使用它來(lái)在表的末尾增加一列,可更改表的名稱。如果需要對(duì)表結(jié)構(gòu)做更復(fù)雜的改變,則必須重新建表。重建時(shí)可以先將已存在的數(shù)據(jù)放到一個(gè)臨時(shí)表中,刪除原表,創(chuàng)建新表,然后將數(shù)據(jù)從臨時(shí)表中復(fù)制回來(lái)。
如,假設(shè)有一個(gè)t1表,其中有"a", "b", "c"三列,如果要?jiǎng)h除列c,以下過(guò)程描述如何做:
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
14、在SQLite中支持分頁(yè)嗎?
SQLite分頁(yè)是世界上最簡(jiǎn)單的。如果我要去11-20的Account表的數(shù)據(jù)Select * From Account Limit 9 Offset 10;
以上語(yǔ)句表示從Account表獲取數(shù)據(jù),跳過(guò)10行,取9行。這個(gè)特性足夠讓很多的web中型網(wǎng)站使用這個(gè)了。也可以這樣寫 select * from account limit10,9和上面的的效果一樣。這種寫法MySQL也支持。
如果不往數(shù)據(jù)庫(kù)里面添加任何的表,這個(gè)數(shù)據(jù)庫(kù)等于沒(méi)有建立,不會(huì)在硬盤上產(chǎn)生任何文件,如果數(shù)據(jù)庫(kù)已經(jīng)存在,則會(huì)打開(kāi)這個(gè)數(shù)據(jù)庫(kù)。
2、 如何通過(guò)sqlite3.dll與sqlite3.def生成sqlite3.lib文件
LIB /DEF:sqlite3.def /machine:IX86
3、 sqlite3_open打開(kāi)一個(gè)數(shù)據(jù)庫(kù)時(shí),如果數(shù)據(jù)庫(kù)不存在就會(huì)新生成一個(gè)數(shù)據(jù)庫(kù)文件。如果接著執(zhí)行其他查詢語(yǔ)句就會(huì)失敗,比如sqlite3_prepare,編程中出現(xiàn)明明指定了數(shù)據(jù)庫(kù)而且里面也有數(shù)據(jù),為什么查詢失敗了,主要是數(shù)據(jù)庫(kù)名路徑不對(duì)引起的。一般的做法是先檢查數(shù)據(jù)庫(kù)文件是否存在,如果存在就使用sqlite3_open打開(kāi)數(shù)據(jù)庫(kù);否則創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。
4、 如何建立自動(dòng)增長(zhǎng)字段
聲明為INTEGER PRIMARY KEY的列將會(huì)自動(dòng)增長(zhǎng)。
5、SQLite3支持何種數(shù)據(jù)類型?
NULL
INTEGER
REAL
TEXT
BLOB
但實(shí)際上,sqlite3也接受如下的數(shù)據(jù)類型:
smallint 16位元的整數(shù)。
interger 32位元的整數(shù)。
decimal(p,s) p精確值和s大小的十進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)點(diǎn)後有幾位數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)設(shè)為p=5; s=0。
float 32位元的實(shí)數(shù)。
double 64位元的實(shí)數(shù)。
char(n) n長(zhǎng)度的字串,n不能超過(guò)254。
varchar(n)長(zhǎng)度不固定且其最大長(zhǎng)度為n的字串,n不能超過(guò)4000。
graphic(n)和char(n)一樣,不過(guò)其單位是兩個(gè)字元double-bytes,n不能超過(guò)127。這個(gè)形態(tài)是為了支援兩個(gè)字元長(zhǎng)度的字體,例如中文字。
vargraphic(n)可變長(zhǎng)度且其最大長(zhǎng)度為n的雙字元字串,n不能超過(guò)2000。
date包含了年份、月份、日期。
time包含了小時(shí)、分鐘、秒。
timestamp包含了年、月、日、時(shí)、分、秒、千分之一秒。
6、SQLite允許向一個(gè)integer型字段中插入字符串
這是一個(gè)特性,而不是一個(gè)bug。SQLite不強(qiáng)制數(shù)據(jù)類型約束。任何數(shù)據(jù)都可以插入任何列。你可以向一個(gè)整型列中插入任意長(zhǎng)度的字符串,向布爾型列中插入浮點(diǎn)數(shù),或者向字符型列中插入日期型值。在CREATE TABLE中所指定的數(shù)據(jù)類型不會(huì)限制在該列中插入任何數(shù)據(jù)。任何列均可接受任意長(zhǎng)度的字符串(只有一種情況除外:標(biāo)志為INTEGER PRIMARY KEY的列只能存儲(chǔ)64位整數(shù),當(dāng)向這種列中插數(shù)據(jù)除整數(shù)以外的數(shù)據(jù)時(shí),將會(huì)產(chǎn)生錯(cuò)誤。
但SQLite確實(shí)使用聲明的列類型來(lái)指示你所期望的格式。所以,例如你向一個(gè)整型列中插入字符串時(shí),SQLite會(huì)試圖將該字符串轉(zhuǎn)換成一個(gè)整數(shù)。如果可以轉(zhuǎn)換,它將插入該整數(shù);否則,將插入字符串。這種特性有時(shí)被稱為類型或列親和性(type or column affinity).
7、為什么SQLite不允許在同一個(gè)表不同的兩行上使用0和0.0作主鍵?
主鍵必須是數(shù)值類型,將主鍵改為TEXT型將不起作用。
每一行必須有一個(gè)唯一的主鍵。對(duì)于一個(gè)數(shù)值型列,SQLite認(rèn)為'0'和'0.0'是相同的,因?yàn)樗麄冊(cè)谧鳛檎麛?shù)比較時(shí)是相等的(參見(jiàn)上一問(wèn)題)。所以,這樣值就不唯一了。
8、多個(gè)應(yīng)用程序或一個(gè)應(yīng)用程序的多個(gè)實(shí)例可以同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)文件嗎?
多個(gè)進(jìn)程可同時(shí)打開(kāi)同一個(gè)數(shù)據(jù)庫(kù)。多個(gè)進(jìn)程可以同時(shí)進(jìn)行SELECT操作,但在任一時(shí)刻,只能有一個(gè)進(jìn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行更改。
SQLite使用讀、寫鎖控制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。(在Win95/98/ME等不支持讀、寫鎖的系統(tǒng)下,使用一個(gè)概率性的模擬來(lái)代替。)但使用時(shí)要注意:如果數(shù)據(jù)庫(kù)文件存放于一個(gè)NFS文件系統(tǒng)上,這種鎖機(jī)制可能不能正常工作。這是因?yàn)閒cntl()文件鎖在很多NFS上沒(méi)有正確的實(shí)現(xiàn)。在可能有多個(gè)進(jìn)程同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,應(yīng)該避免將數(shù)據(jù)庫(kù)文件放到NFS上。在Windows上,Microsoft的文檔中說(shuō):如果使用FAT文件系統(tǒng)而沒(méi)有運(yùn)行share.exe守護(hù)進(jìn)程,那么鎖可能是不能正常使用的。那些在Windows上有很多經(jīng)驗(yàn)的人告訴我:對(duì)于網(wǎng)絡(luò)文件,文件鎖的實(shí)現(xiàn)有好多Bug,是靠不住的。如果他們說(shuō)的是對(duì)的,那么在兩臺(tái)或多臺(tái)Windows機(jī)器間共享數(shù)據(jù)庫(kù)可能會(huì)引起不期望的問(wèn)題。
我們意識(shí)到,沒(méi)有其它嵌入式的SQL數(shù)據(jù)庫(kù)引擎能象SQLite這樣處理如此多的并發(fā)。SQLite允許多個(gè)進(jìn)程同時(shí)打開(kāi)一個(gè)數(shù)據(jù)庫(kù),同時(shí)讀一個(gè)數(shù)據(jù)庫(kù)。當(dāng)有任何進(jìn)程想要寫時(shí),它必須在更新過(guò)程中鎖住數(shù)據(jù)庫(kù)文件。但那通常只是幾毫秒的時(shí)間。其它進(jìn)程只需等待寫進(jìn)程干完活結(jié)束。典型地,其它嵌入式的SQL數(shù)據(jù)庫(kù)引擎同時(shí)只允許一個(gè)進(jìn)程連接到數(shù)據(jù)庫(kù)。
但是,Client/Server數(shù)據(jù)庫(kù)引擎(如PostgreSQL, MySQL,或Oracle)通常支持更高級(jí)別的并發(fā),并且允許多個(gè)進(jìn)程同時(shí)寫同一個(gè)數(shù)據(jù)庫(kù)。這種機(jī)制在Client/Server結(jié)構(gòu)的數(shù)據(jù)庫(kù)上是可能的,因?yàn)榭偸怯幸粋€(gè)單一的服務(wù)器進(jìn)程很好地控制、協(xié)調(diào)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。如果你的應(yīng)用程序需要很多的并發(fā),那么你應(yīng)該考慮使用一個(gè)Client/Server結(jié)構(gòu)的數(shù)據(jù)庫(kù)。但經(jīng)驗(yàn)表明,很多應(yīng)用程序需要的并發(fā),往往比其設(shè)計(jì)者所想象的少得多。
當(dāng)SQLite試圖訪問(wèn)一個(gè)被其它進(jìn)程鎖住的文件時(shí),缺省的行為是返回SQLITE_BUSY。可以在C代碼中使用sqlite3_busy_handler()或sqlite3_busy_timeout() API函數(shù)調(diào)整這一行為。
9、SQLite線程安全嗎?
線程是魔鬼(Threads are evil)。避免使用它們。
SQLite是線程安全的。由于很多用戶會(huì)忽略我們?cè)谏弦欢沃薪o出的建議,我們做出了這種讓步。但是,為了達(dá)到線程安全,SQLite在編譯時(shí)必須將SQLITE_THREADSAFE預(yù)處理宏置為1。在Windows和Linux上,已編譯的好的二進(jìn)制發(fā)行版中都是這樣設(shè)置的。如果不確定你所使用的庫(kù)是否是線程安全的,可以調(diào)用sqlite3_threadsafe()接口找出。
10、在SQLite數(shù)據(jù)庫(kù)中如何列出所有的表和索引?
如果你運(yùn)行sqlite3命令行來(lái)訪問(wèn)你的數(shù)據(jù)庫(kù),可以鍵入“.tables”來(lái)獲得所有表的列表?;蛘?,你可以輸入“.schema”來(lái)看整個(gè)數(shù)據(jù)庫(kù)模式,包括所有的表的索引。輸入這些命令,后面跟一個(gè)LIKE模式匹配可以限制顯示的表。
11、SQLite數(shù)據(jù)庫(kù)有已知的大小限制嗎?
在Windows和Unix下,版本2.7.4的SQLite可以達(dá)到2的41次方字節(jié)(2T字節(jié))。老版本的為2的31次方字節(jié)(2G字節(jié))。
SQLite版本2.8限制一個(gè)記錄的容量為1M。SQLite版本3.0則對(duì)單個(gè)記錄容量沒(méi)有限制。
表名、索引表名、視圖名、觸發(fā)器名和字段名沒(méi)有長(zhǎng)度限制。但SQL函數(shù)的名稱(由sqlite3_create_function() API函數(shù)創(chuàng)建)不得超過(guò)255個(gè)字符。
12、在SQLite中,VARCHAR字段最長(zhǎng)是多少?
SQLite不強(qiáng)制VARCHAR的長(zhǎng)度。你可以在SQLITE中聲明一個(gè)VARCHAR(10),SQLite還是可以很高興地允許你放入500個(gè)字符。并且這500個(gè)字符是原封不動(dòng)的,它永遠(yuǎn)不會(huì)被截?cái)唷?BR>
13、在SQLite中,如何在一個(gè)表上添加或刪除一列?
SQLite有有限地ALTER TABLE支持。你可以使用它來(lái)在表的末尾增加一列,可更改表的名稱。如果需要對(duì)表結(jié)構(gòu)做更復(fù)雜的改變,則必須重新建表。重建時(shí)可以先將已存在的數(shù)據(jù)放到一個(gè)臨時(shí)表中,刪除原表,創(chuàng)建新表,然后將數(shù)據(jù)從臨時(shí)表中復(fù)制回來(lái)。
如,假設(shè)有一個(gè)t1表,其中有"a", "b", "c"三列,如果要?jiǎng)h除列c,以下過(guò)程描述如何做:
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
14、在SQLite中支持分頁(yè)嗎?
SQLite分頁(yè)是世界上最簡(jiǎn)單的。如果我要去11-20的Account表的數(shù)據(jù)Select * From Account Limit 9 Offset 10;
以上語(yǔ)句表示從Account表獲取數(shù)據(jù),跳過(guò)10行,取9行。這個(gè)特性足夠讓很多的web中型網(wǎng)站使用這個(gè)了。也可以這樣寫 select * from account limit10,9和上面的的效果一樣。這種寫法MySQL也支持。
相關(guān)文章
Mysql 5.6 "隱式轉(zhuǎn)換"導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題
這篇文章主要介紹了Mysql 5.6 “隱式轉(zhuǎn)換”導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12MySQL中通過(guò)EXPLAIN如何分析SQL的執(zhí)行計(jì)劃詳解
這篇文章主要給大家介紹了關(guān)于MySQL中通過(guò)EXPLAIN如何分析SQL的執(zhí)行計(jì)劃的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的安康學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08使用Mycat-eye管理Mycat數(shù)據(jù)庫(kù)服務(wù)的操作
MyCat是一個(gè)開(kāi)源的分布式數(shù)據(jù)庫(kù)系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫(kù)代理,用MySQL客戶端工具和命令行訪問(wèn),本文給大家介紹了使用Mycat-eye管理Mycat數(shù)據(jù)庫(kù)服務(wù)的操作,需要的朋友可以參考下2024-04-04MySQL/Oracle數(shù)據(jù)庫(kù)的字符串轉(zhuǎn)日期、日期轉(zhuǎn)字符串
在許多數(shù)據(jù)庫(kù)中,你可以使用內(nèi)置的函數(shù)或操作符來(lái)進(jìn)行字符串和日期之間的相互轉(zhuǎn)換,這篇文章主要給大家介紹了關(guān)于MySQL/Oracle數(shù)據(jù)庫(kù)的字符串轉(zhuǎn)日期、日期轉(zhuǎn)字符串的相關(guān)資料,需要的朋友可以參考下2024-07-07MySQL的一些功能實(shí)用的Linux shell腳本分享
這篇文章主要介紹了Linux系統(tǒng)下MySQL的一些實(shí)用功能的shell腳本分享,包括啟動(dòng)Memcached、binlog自動(dòng)清理和修復(fù)主從同步這樣三個(gè)簡(jiǎn)單的實(shí)例,需要的朋友可以參考下2015-12-12Mysql中Table ‘XXX’ is marked as crashed and last (automatic?)
這篇文章主要介紹了Mysql中Table ‘XXX’ is marked as crashed and last (automatic?)問(wèn)題解決方法,需要的朋友可以參考下2014-05-05