日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sqlite3 命令行简易教程

發(fā)布時(shí)間:2025/3/18 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite3 命令行简易教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQLite庫(kù)包含一個(gè)名字叫做sqlite3的命令行,它可以讓用戶(hù)手工輸入并執(zhí)行面向SQLite數(shù)據(jù)庫(kù)的SQL命令。本文檔提供一個(gè)樣使用sqlite3的簡(jiǎn)要說(shuō)明。

開(kāi)始

????? 啟動(dòng)sqlite3程序,僅僅需要敲入帶有SQLite數(shù)據(jù)庫(kù)名字的"sqlite3"命令即可。如果文件不存在,則創(chuàng)建一個(gè)新的(數(shù)據(jù)庫(kù))文件。然后sqlite3程序?qū)⑻崾灸爿斎隨QL。敲入SQL語(yǔ)句(以分號(hào)“;”結(jié)束),敲回車(chē)鍵之后,SQL語(yǔ)句就會(huì)執(zhí)行。

??????? 例如,創(chuàng)建一個(gè)包含一個(gè)表"tb11"名字為"ex1"的SQLite數(shù)據(jù)庫(kù),你可以這樣做:

$sqlite3 ex1

SQLite version 3.3.17

Enter ".help" for instructions

sqlite> create table tbl1(one varchar(10), two smallint);

sqlite> insert into tbl1 values('hello!', 10);

sqlite> insert into tbl1 values('goodbye', 20);

sqlite> select * from tbl1;

hello!|10

goodbye|20

sqlite>

??????? 你可以通過(guò)敲你所用系統(tǒng)的文件結(jié)束符(通常是Ctrl + D)或者中斷字符(通常是Ctrl + C)。來(lái)終止sqlite3程序。確定你在每個(gè)SQL語(yǔ)句結(jié)束敲入分號(hào)!sqlite3程序通過(guò)查找分號(hào)來(lái)決定一個(gè)SQL語(yǔ)句的結(jié)束。如果你省略分號(hào),sqlite3將給你一個(gè)連續(xù)的命令提示符并等你給當(dāng)前的SQL命令添加更多的文字。這個(gè)特點(diǎn)讓你輸入多行的多個(gè)SQL語(yǔ)句,例如:

sqlite> create table tbl2(

?? ...> f1 varchar(30) primary key,

?? ...> f2 text,

?? ...> f3 real

?? ...> );

sqlite>

題外話(huà):查詢(xún)SQLITE_MASTER表

??? SQLite數(shù)據(jù)庫(kù)的框架被保存在一個(gè)名叫"sqlite_master"的特殊的表中。你可以像查詢(xún)其它表一樣通過(guò)執(zhí)行“SELECT”查詢(xún)這個(gè)特殊的表。例如:

$?sqlite3?ex1

SQlite?vresion?3.3.10

Enter?".help"?for?instructions

sqlite>?select?*?from?sqlite_master;

????type?=?table

????name?=?tbl1

tbl_name?=?tbl1

rootpage?=?3

?????sql?=?create?table?tbl1(one?varchar(10),?two?smallint)

sqlite>

??? 但你不能在sqlite_master表中執(zhí)行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創(chuàng)建、刪除和索引數(shù)據(jù)庫(kù)時(shí)自動(dòng)更新這個(gè)表。你不能手工更改sqlite_master表。

??? TEMPORARY表的結(jié)構(gòu)沒(méi)有存儲(chǔ)在"sqlite_master"表中,由于TEMPORARY表對(duì)應(yīng)用是不可見(jiàn)的,而不是應(yīng)用程序創(chuàng)建這個(gè)表。TEMPORARY表結(jié)構(gòu)被存儲(chǔ)在另外一個(gè)名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨時(shí)表自身。

sqlite3的特殊命令

?? 大多數(shù)候,sqlite3讀入輸入行,并把它們傳遞到SQLite庫(kù)中去運(yùn)行。但是如果輸入行以一個(gè)點(diǎn)(“.”)開(kāi)始,那么這行將被sqlite3程序自己截取并解釋。這些“點(diǎn)命令”通常被用來(lái)改變查詢(xún)輸出的格式,或者執(zhí)行鞭個(gè)預(yù)封包(預(yù)定義prepackaged)的查詢(xún)語(yǔ)句。

你可以在任何時(shí)候輸入“.help”,列出可用的點(diǎn)命令。例如

sqlite>?.help

.bail?ON|OFF???????????Stop?after?hitting?an?error.??Default?OFF

.databases?????????????List?names?and?files?of?attached?databases

.dump??TABLE??...??????Dump?the?database?in?an?SQL?text?format

.echo?ON|OFF???????????Turn?command?echo?on?or?off

.exit??????????????????Exit?this?program

.explain?ON|OFF????????Turn?output?mode?suitable?for?EXPLAIN?on?or?off.

.header(s)?ON|OFF??????Turn?display?of?headers?on?or?off

.help??????????????????Show?this?message

.import?FILE?TABLE?????Import?data?from?FILE?into?TABLE

.indices?TABLE?????????Show?names?of?all?indices?on?TABLE

.load?FILE??ENTRY??????Load?an?extension?library

.mode?MODE??TABLE??????Set?output?mode?where?MODE?is?one?of:

?????????????????????????csv??????Comma-separated?values

?????????????????????????column???Left-aligned?columns.??(See?.width)

?????????????????????????html?????HTML?<table>?code

?????????????????????????insert???SQL?insert?statements?for?TABLE

?????????????????????????line?????One?value?per?line

?????????????????????????list?????Values?delimited?by?.separator?string

?????????????????????????tabs?????Tab-separated?values

?????????????????????????tcl??????TCL?list?elements

.nullvalue?STRING??????Print?STRING?in?place?of?NULL?values

.output?FILENAME???????Send?output?to?FILENAME

.output?stdout?????????Send?output?to?the?screen

.prompt?MAIN?CONTINUE??Replace?the?standard?prompts

.quit??????????????????Exit?this?program

.read?FILENAME?????????Execute?SQL?in?FILENAME

.schema??TABLE?????????Show?the?CREATE?statements

.separator?STRING??????Change?separator?used?by?output?mode?and?.import

.show??????????????????Show?the?current?values?for?various?settings

.tables??PATTERN???????List?names?of?tables?matching?a?LIKE?pattern

.timeout?MS????????????Try?opening?locked?tables?for?MS?milliseconds

.width?NUM?NUM?...?????Set?column?widths?for?"column"?mode

sqlite>

改變輸出格式

??? sqlite3程序可以以八種不同的格式顯示一個(gè)查詢(xún)的結(jié)果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。你可以用".mode"點(diǎn)命令在這些輸出格式之間切換。

??? 默認(rèn)的輸出格式是“列表”。在列表模式下,每條查詢(xún)結(jié)果記錄被寫(xiě)在一行中并且每列之間以一個(gè)字符串分割符隔開(kāi)。默認(rèn)的分隔符是一個(gè)管道符號(hào)(“|”)。列表符號(hào)在當(dāng)你輸出查詢(xún)結(jié)果到另外一個(gè)符加處理的程序(如AWK)中去是尤為有用。

sqlite>?.mode?list

sqlite>?select?*?from?tbl1;

hello|10

goodbye|20

sqlite>

??? 你可以用“.separator”點(diǎn)命令來(lái)改變分界符。例如,為了把分割符改為一個(gè)逗號(hào)和一個(gè)空格,你可以這樣做:

sqlite>?.separator?",?"

sqlite>?select?*?from?tbl1;

hello,?10

goodbye,?20

sqlite>

??? 在“l(fā)ine"模式下,每一個(gè)位于條記錄中的列在它自己那行顯示。每行由列名、一個(gè)等號(hào)和列數(shù)據(jù)組成。下一條記錄以一個(gè)空行隔開(kāi)。這是一個(gè)行模式輸出的例子:

sqlite>?.mode?line

sqlite>?select?*?from?tbl1;

one?=?hello

two?=?10

one?=?goodbye

two?=?20

sqlite>

??? 在列模式下,每條記錄在一個(gè)單獨(dú)的行中以數(shù)據(jù)列對(duì)齊的方式顯示。列如:

sqlite>?.mode?column

sqlite>?select?*?from?tbl1;

one?????????two???????

----------??----------

hello???????10????????

goodbye?????20????????

sqlite>

??????? 在默認(rèn)的情況下,每列至少10個(gè)字符寬。太寬的數(shù)據(jù)將被截取。你可以用“.width”命令來(lái)調(diào)整列寬。如下所示:

?

sqlite>?.width?12?6

sqlite>?select?*?from?tbl1;

one???????????two???

------------??------

hello?????????10????

goodbye???????20????

sqlite>

?

????上面例子中".width"命令設(shè)置第一列寬為12第二列寬為6。其它的列寬不變。你可以指定與你查詢(xún)結(jié)果需要的列數(shù)一樣多的“.width”參數(shù)。

??? 如果你指定一列寬為0,那么這個(gè)列寬將自動(dòng)以下面三個(gè)數(shù)字中的最大值做為列寬:10、表頭寬度和最寬的數(shù)據(jù)列的寬度。這可以讓列自動(dòng)調(diào)整寬度。每列的默認(rèn)設(shè)置為自動(dòng)調(diào)整的0值。

??? 出現(xiàn)在輸出開(kāi)頭兩行的列標(biāo)示可以用".header"點(diǎn)命令關(guān)閉。在上面的例子中,列標(biāo)示是打開(kāi)的。可以用下面的方法關(guān)閉列標(biāo)示:

?

sqlite>?.header?off

sqlite>?select?*?from?tbl1;

hello?????????10????

goodbye???????20????

sqlite>

?

??? 另外一個(gè)有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來(lái)像SQL INSERT語(yǔ)句的樣式。你可以用插入模式來(lái)產(chǎn)生文件(便于)以后用于不同數(shù)據(jù)庫(kù)的輸入。

??? 當(dāng)指定插入模式時(shí),你必須給定一個(gè)特定參數(shù)就是要插入的表名。例如:

?

sqlite>?.mode?insert?new_table

sqlite>?select?*?from?tbl1;

INSERT?INTO?'new_table'?VALUES('hello',10);

INSERT?INTO?'new_table'?VALUES('goodbye',20);

sqlite>

?

??? 最新的輸出格式是“html”。在這種模式下,sqlite3把查詢(xún)的結(jié)果寫(xiě)做XHTML表。開(kāi)始的<TABLE>和結(jié)束的</TABLE>(標(biāo)記)沒(méi)有寫(xiě)出,但有<TR>、<TH>和<TD>等分界符。html輸出對(duì)CGI來(lái)說(shuō)是相當(dāng)有用地。

把結(jié)果寫(xiě)到文件中

??? 默認(rèn)情況下,sqlte3把結(jié)送到標(biāo)準(zhǔn)輸出。你可以用“.output”命令改變它。只須把輸出文件名做為.output命令的輸出參數(shù)然后所有后續(xù)查詢(xún)結(jié)果將被寫(xiě)到那個(gè)文件中。用“.output stdout”再一次改為標(biāo)準(zhǔn)輸出。例如:

?

sqlite>?.mode?list

sqlite>?.separator?|

sqlite>?.output?test_file_1.txt

sqlite>?select?*?from?tbl1;

sqlite>?.exit

$?cat?test_file_1.txt

hello|10

goodbye|20

$

?

查詢(xún)數(shù)據(jù)庫(kù)結(jié)構(gòu)

????sqlite3程序提供幾個(gè)有用的用于查詢(xún)數(shù)據(jù)庫(kù)結(jié)構(gòu)的快捷命令。這些不是不可以用別的方式來(lái)實(shí)現(xiàn)。這些命令僅僅是一個(gè)快捷方式而已。

??? 例如,為了查看數(shù)據(jù)庫(kù)的表列表,你可以敲入“.tables”。

?

sqlite>?.tables

tbl1

tbl2

sqlite>

?

??? “.tables”命令相似于設(shè)置列表模式然后執(zhí)行接下來(lái)的查詢(xún):

?

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN ('table','view') ORDER BY 1

?

事實(shí)上,你可以查看sqlite3的源代碼(可以在源文件樹(shù)的src/shell.c中),你可找到上面的具體的查詢(xún)。

“.indices”命令作用類(lèi)似的方式是列出特定表的所有的索引。“.indics”命令須一個(gè)參數(shù)即所要索引表的表名。最后,但不是至少,是“.schema”命令。不帶任何參數(shù),“.schema”命令顯示原始的用于創(chuàng)建當(dāng)前數(shù)據(jù)庫(kù)的CREATE TABLE和CREATE INDEX語(yǔ)句。如果你給".schema"命令一個(gè)表名,它顯示原始的創(chuàng)建該表和它所有索引的CREATE語(yǔ)句。我們可以:

?

sqlite>?.schema

create?table?tbl1(one?varchar(10),?two?smallint)

CREATE?TABLE?tbl2?(

??f1?varchar(30)?primary?key,

??f2?text,

??f3?real

)

sqlite>?.schema?tbl2

CREATE?TABLE?tbl2?(

??f1?varchar(30)?primary?key,

??f2?text,

??f3?real

)

sqlite>

?

".schema"命令可以用設(shè)置列表然后執(zhí)行以下查詢(xún)來(lái)實(shí)現(xiàn):

?

?

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type!='meta'ORDER BY tbl_name, type DESC, name

?

?

或者,如果你給".schema"命令一個(gè)參數(shù),由于你只想得到一個(gè)表的結(jié)構(gòu),查詢(xún)可以是這樣:

?

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'ORDER BY substr(type,2,1), name

?

你可以擔(dān)供一個(gè)參數(shù)給.schema命令。如果這橛,查詢(xún)可以是這樣的:

?

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE tbl_name LIKE '%s' AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'ORDER BY substr(type,2,1), name

?

在查詢(xún)中“%S“為你的參數(shù)所取代。這使你可以詢(xún)數(shù)據(jù)庫(kù)結(jié)構(gòu)的某個(gè)子集。

?

sqlite>?.schema?%abc%

?

與這些一起,“.table”命令也接受一個(gè)模式作為他的參數(shù)。如果你給“.table”一個(gè)參數(shù),“%”將被前后擴(kuò)展并且一個(gè)LIKE子句被附加到查詢(xún)上。這讓你可以列出只與特定模式相匹配的的表。

“.datebasae”命令顯示所有當(dāng)前連接打開(kāi)的數(shù)據(jù)庫(kù)的一個(gè)列表。將允許一次到少兩個(gè)。第一個(gè)是“main”,最初打開(kāi)的那個(gè)數(shù)據(jù)庫(kù)。第二個(gè)是"temp",用于臨時(shí)表的數(shù)據(jù)庫(kù)。對(duì)于用ATTACH語(yǔ)句附加的數(shù)據(jù)也許有附加數(shù)據(jù)庫(kù)列表。輸出的第一列與之相聯(lián)的數(shù)據(jù)庫(kù)名,第二列是外部文件名。

?

sqlite>?.databases

?

將整個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)換為ASCII文本文件

".dump"命令成一個(gè)單一的ASCII文本文件。這個(gè)文件可以被用作管道傳遞給sqlite3命令來(lái)轉(zhuǎn)換回?cái)?shù)據(jù)庫(kù)。

一個(gè)最好的制作一個(gè)數(shù)據(jù)庫(kù)檔案拷貝的命令是:

?

$?echo?'.dump'?|?sqlite3?ex1?|?gzip?-c?>ex1.dump.gz

?

它產(chǎn)生一個(gè)一個(gè)名為ex1.dump.gz的文件,它包含了你以后或在其它機(jī)器上重構(gòu)數(shù)據(jù)庫(kù)的所有的信息。要重構(gòu)數(shù)據(jù)庫(kù),只須敲入:

?

$?zcat?ex1.dump.gz?|?sqlite3?ex2

?

這個(gè)文本格式是純粹的SQL語(yǔ)句所以你可以用.dump命令來(lái)導(dǎo)出一個(gè)SQLite數(shù)據(jù)庫(kù)到另一個(gè)常用的SQL數(shù)據(jù)庫(kù)引擎。比如:

?

$?createdb?ex2

$?sqlite3?ex1?.dump?|?psql?ex2

?

其它的點(diǎn)命令

".explain"命令可以被用來(lái)設(shè)置輸出格式為“column”?并設(shè)置列寬為EXPLAIN命令看起來(lái)比較合理的寬度。EXPLAIN命令是SQLite特有的SQL擴(kuò)展,它是對(duì)調(diào)試有用。如果任何常規(guī)的SQL被EXPLAIN執(zhí)行,那么SQL命令被分解并分析但并不執(zhí)行。取而代之的是,虛擬機(jī)指令序列將被用于執(zhí)行SQL命令并返回一個(gè)類(lèi)似的查詢(xún)結(jié)果。如:

?

?

sqlite>?.explain

sqlite>?explain?delete?from?tbl1?where?two<20;

addr??opcode????????p1?????p2?????p3??????????

----??------------??-----??-----??-------------------------------------???

0?????ListOpen??????0??????0??????????????????

1?????Open??????????0??????1??????tbl1????????

2?????Next??????????0??????9??????????????????

3?????Field?????????0??????1??????????????????

4?????Integer???????20?????0??????????????????

5?????Ge????????????0??????2??????????????????

6?????Key???????????0??????0??????????????????

7?????ListWrite?????0??????0??????????????????

8?????Goto??????????0??????2??????????????????

9?????Noop??????????0??????0??????????????????

10????ListRewind????0??????0??????????????????

11????ListRead??????0??????14?????????????????

12????Delete????????0??????0??????????????????

13????Goto??????????0??????11?????????????????

14????ListClose?????0??????0

?

“.timeout”命令設(shè)置sqlite3等待一個(gè)試圖存儲(chǔ)文件鎖定請(qǐng)除直到錯(cuò)誤返回的總時(shí)間。默認(rèn)的超時(shí)值是0因此如果任何需要的數(shù)據(jù)庫(kù)表或序列列被鎖定時(shí)它將立即返回一個(gè)錯(cuò)誤。

最后,我們提到“.exit”命令它交導(dǎo)致sqlite3退出。

在命令和腳本中使用sqlite3

一個(gè)在腳本命令中使用sqlite3的方式是用“echo”或“cat”來(lái)產(chǎn)生一個(gè)命令序列在一個(gè)文件中,然后當(dāng)從一個(gè)產(chǎn)生的命令行中重定向輸入時(shí)調(diào)用sqlite3。它有用并且適應(yīng)許多環(huán)境。但作為一附加的便利是,sqlite3允許一個(gè)單一的SQL語(yǔ)句在命令行中作為數(shù)據(jù)庫(kù)名后的第二個(gè)參數(shù)輸入。當(dāng)sqlite3程序帶著兩個(gè)參數(shù)啟動(dòng)時(shí),第二個(gè)參數(shù)被傳遞給SQLite庫(kù)處理,查詢(xún)以列表模式打印到標(biāo)準(zhǔn)輸出,然后程序退出。這個(gè)機(jī)制被設(shè)計(jì)用于讓sqlite3容易于用于連接諸如"AWK"的程序。例如:

?

$?sqlite3?ex1?'select?*?from?tbl1'?|

>??awk?'{printf?"<tr><td>%s<td>%s/n",$1,$2?}'

<tr><td>hello<td>10

<tr><td>goodbye<td>20

$

?

結(jié)束命令行命令

SQLite命令通常以一個(gè)分號(hào)結(jié)束。在一個(gè)命令行中你也可以用“GO”單詞(大小寫(xiě)敏感)或者一個(gè)“/”斜線在它所在好行結(jié)束一個(gè)命令。這常被SQL Server和Oracle使用。這些將不在sqlite3_exec()中有用,因?yàn)槊钚性趥鬟f它們到函數(shù)之前把這些翻譯為分號(hào)。

從源文件中編譯sqlite3

sqlite3程序當(dāng)你編譯SQLite庫(kù)時(shí)自動(dòng)被建立。只須取得一個(gè)源文件樹(shù)的拷貝,運(yùn)行“configure"然后"make"即可。

轉(zhuǎn)自:http://flywindwyy.blog.163.com/blog/static/1725508532010928113417337/

總結(jié)

以上是生活随笔為你收集整理的sqlite3 命令行简易教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。