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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlite3 命令行简易教程

發布時間:2025/3/18 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite3 命令行简易教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入并執行面向SQLite數據庫的SQL命令。本文檔提供一個樣使用sqlite3的簡要說明。

開始

????? 啟動sqlite3程序,僅僅需要敲入帶有SQLite數據庫名字的"sqlite3"命令即可。如果文件不存在,則創建一個新的(數據庫)文件。然后sqlite3程序將提示你輸入SQL。敲入SQL語句(以分號“;”結束),敲回車鍵之后,SQL語句就會執行。

??????? 例如,創建一個包含一個表"tb11"名字為"ex1"的SQLite數據庫,你可以這樣做:

$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>

??????? 你可以通過敲你所用系統的文件結束符(通常是Ctrl + D)或者中斷字符(通常是Ctrl + C)。來終止sqlite3程序。確定你在每個SQL語句結束敲入分號!sqlite3程序通過查找分號來決定一個SQL語句的結束。如果你省略分號,sqlite3將給你一個連續的命令提示符并等你給當前的SQL命令添加更多的文字。這個特點讓你輸入多行的多個SQL語句,例如:

sqlite> create table tbl2(

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

?? ...> f2 text,

?? ...> f3 real

?? ...> );

sqlite>

題外話:查詢SQLITE_MASTER表

??? SQLite數據庫的框架被保存在一個名叫"sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過執行“SELECT”查詢這個特殊的表。例如:

$?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表中執行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創建、刪除和索引數據庫時自動更新這個表。你不能手工更改sqlite_master表。

??? TEMPORARY表的結構沒有存儲在"sqlite_master"表中,由于TEMPORARY表對應用是不可見的,而不是應用程序創建這個表。TEMPORARY表結構被存儲在另外一個名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨時表自身。

sqlite3的特殊命令

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

你可以在任何時候輸入“.help”,列出可用的點命令。例如

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程序可以以八種不同的格式顯示一個查詢的結果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。你可以用".mode"點命令在這些輸出格式之間切換。

??? 默認的輸出格式是“列表”。在列表模式下,每條查詢結果記錄被寫在一行中并且每列之間以一個字符串分割符隔開。默認的分隔符是一個管道符號(“|”)。列表符號在當你輸出查詢結果到另外一個符加處理的程序(如AWK)中去是尤為有用。

sqlite>?.mode?list

sqlite>?select?*?from?tbl1;

hello|10

goodbye|20

sqlite>

??? 你可以用“.separator”點命令來改變分界符。例如,為了把分割符改為一個逗號和一個空格,你可以這樣做:

sqlite>?.separator?",?"

sqlite>?select?*?from?tbl1;

hello,?10

goodbye,?20

sqlite>

??? 在“line"模式下,每一個位于條記錄中的列在它自己那行顯示。每行由列名、一個等號和列數據組成。下一條記錄以一個空行隔開。這是一個行模式輸出的例子:

sqlite>?.mode?line

sqlite>?select?*?from?tbl1;

one?=?hello

two?=?10

one?=?goodbye

two?=?20

sqlite>

??? 在列模式下,每條記錄在一個單獨的行中以數據列對齊的方式顯示。列如:

sqlite>?.mode?column

sqlite>?select?*?from?tbl1;

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

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

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

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

sqlite>

??????? 在默認的情況下,每列至少10個字符寬。太寬的數據將被截取。你可以用“.width”命令來調整列寬。如下所示:

?

sqlite>?.width?12?6

sqlite>?select?*?from?tbl1;

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

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

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

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

sqlite>

?

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

??? 如果你指定一列寬為0,那么這個列寬將自動以下面三個數字中的最大值做為列寬:10、表頭寬度和最寬的數據列的寬度。這可以讓列自動調整寬度。每列的默認設置為自動調整的0值。

??? 出現在輸出開頭兩行的列標示可以用".header"點命令關閉。在上面的例子中,列標示是打開的。可以用下面的方法關閉列標示:

?

sqlite>?.header?off

sqlite>?select?*?from?tbl1;

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

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

sqlite>

?

??? 另外一個有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來像SQL INSERT語句的樣式。你可以用插入模式來產生文件(便于)以后用于不同數據庫的輸入。

??? 當指定插入模式時,你必須給定一個特定參數就是要插入的表名。例如:

?

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把查詢的結果寫做XHTML表。開始的<TABLE>和結束的</TABLE>(標記)沒有寫出,但有<TR>、<TH>和<TD>等分界符。html輸出對CGI來說是相當有用地。

把結果寫到文件中

??? 默認情況下,sqlte3把結送到標準輸出。你可以用“.output”命令改變它。只須把輸出文件名做為.output命令的輸出參數然后所有后續查詢結果將被寫到那個文件中。用“.output stdout”再一次改為標準輸出。例如:

?

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

$

?

查詢數據庫結構

????sqlite3程序提供幾個有用的用于查詢數據庫結構的快捷命令。這些不是不可以用別的方式來實現。這些命令僅僅是一個快捷方式而已。

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

?

sqlite>?.tables

tbl1

tbl2

sqlite>

?

??? “.tables”命令相似于設置列表模式然后執行接下來的查詢:

?

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

?

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

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

?

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"命令可以用設置列表然后執行以下查詢來實現:

?

?

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"命令一個參數,由于你只想得到一個表的結構,查詢可以是這樣:

?

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

?

你可以擔供一個參數給.schema命令。如果這橛,查詢可以是這樣的:

?

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

?

在查詢中“%S“為你的參數所取代。這使你可以詢數據庫結構的某個子集。

?

sqlite>?.schema?%abc%

?

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

“.datebasae”命令顯示所有當前連接打開的數據庫的一個列表。將允許一次到少兩個。第一個是“main”,最初打開的那個數據庫。第二個是"temp",用于臨時表的數據庫。對于用ATTACH語句附加的數據也許有附加數據庫列表。輸出的第一列與之相聯的數據庫名,第二列是外部文件名。

?

sqlite>?.databases

?

將整個數據庫轉換為ASCII文本文件

".dump"命令成一個單一的ASCII文本文件。這個文件可以被用作管道傳遞給sqlite3命令來轉換回數據庫。

一個最好的制作一個數據庫檔案拷貝的命令是:

?

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

?

它產生一個一個名為ex1.dump.gz的文件,它包含了你以后或在其它機器上重構數據庫的所有的信息。要重構數據庫,只須敲入:

?

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

?

這個文本格式是純粹的SQL語句所以你可以用.dump命令來導出一個SQLite數據庫到另一個常用的SQL數據庫引擎。比如:

?

$?createdb?ex2

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

?

其它的點命令

".explain"命令可以被用來設置輸出格式為“column”?并設置列寬為EXPLAIN命令看起來比較合理的寬度。EXPLAIN命令是SQLite特有的SQL擴展,它是對調試有用。如果任何常規的SQL被EXPLAIN執行,那么SQL命令被分解并分析但并不執行。取而代之的是,虛擬機指令序列將被用于執行SQL命令并返回一個類似的查詢結果。如:

?

?

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”命令設置sqlite3等待一個試圖存儲文件鎖定請除直到錯誤返回的總時間。默認的超時值是0因此如果任何需要的數據庫表或序列列被鎖定時它將立即返回一個錯誤。

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

在命令和腳本中使用sqlite3

一個在腳本命令中使用sqlite3的方式是用“echo”或“cat”來產生一個命令序列在一個文件中,然后當從一個產生的命令行中重定向輸入時調用sqlite3。它有用并且適應許多環境。但作為一附加的便利是,sqlite3允許一個單一的SQL語句在命令行中作為數據庫名后的第二個參數輸入。當sqlite3程序帶著兩個參數啟動時,第二個參數被傳遞給SQLite庫處理,查詢以列表模式打印到標準輸出,然后程序退出。這個機制被設計用于讓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

$

?

結束命令行命令

SQLite命令通常以一個分號結束。在一個命令行中你也可以用“GO”單詞(大小寫敏感)或者一個“/”斜線在它所在好行結束一個命令。這常被SQL Server和Oracle使用。這些將不在sqlite3_exec()中有用,因為命令行在傳遞它們到函數之前把這些翻譯為分號。

從源文件中編譯sqlite3

sqlite3程序當你編譯SQLite庫時自動被建立。只須取得一個源文件樹的拷貝,運行“configure"然后"make"即可。

轉自:http://flywindwyy.blog.163.com/blog/static/1725508532010928113417337/

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。