《linux下sqlite3的特殊命令(2)》要點:
本文介紹了linux下sqlite3的特殊命令(2),希望對您有用。如果有疑問,可以聯系我們。
相關主題:sqlite3
當指定插入模式時,你必須給定一個特定參數就是要插入的表名。例如:
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://www.snjht.com/jiaocheng/86_2.html