文章目錄
- 使用入門
- 除: 僅使用SQLITE_MASTER 表
- 特殊命令來sqlite3
- 更改輸出格式
- 將結果寫入一個檔案
- 提交到資料庫模式
- 將整個資料庫轉換為一個ASCII 文本的檔案
- 其他點命令
- 使用sqlite3 在shell 指令碼
- 結束shell 命令
- 將sqlite3 編譯器從源
轉http://www.helplib.net/s/sqlite/9/15.shtml
SQLite 庫包含了一個簡單的命令列工具 + 生產力命名sqlite3 (或sqlite3exe 在windows 上), 它允許使用者手動輸入並執行SQL 命令針對一個SQLite 資料庫此文檔提供了有關如何使用簡要介紹sqlite3 程式
使用入門
要啟動"sqlite3 程式時, 只需鍵入"sqlite3 ", 後跟該檔案SQLite , 該資料庫如果該檔案不存在, 則自動"sqlite3 程式將提示您要輸入SQL在SQL 陳述式類型(由一個semicolon) 終止, SQL 按"enter ", 將會被執行
例如, 要建立一個新的名為"ex1 "SQLite 資料庫使用一個"tbl1 名為的表", 可能會這樣做:
$sqlite3 ex1 SQLite 版本3611 輸入"協助"有關說明用"; "輸入SQL 陳述式終止sqlite > create table tbl1(one varchar(10) , 兩個smallint) ;sqlite > insert into tbl1 values( ''hello! '', 10) ;sqlite > insert into tbl1 values( ''goodbye '' , 20) ;sqlite > select *from tbl1 ;hello!|10 goodbye|20 sqlite >
通過鍵入以下命令可以終止sqlite3 程式您的系統End-Of-File 字元(通常為Control-D)使用中斷字元(通常是一個Control-C) 停止長時間啟動並執行SQL 陳述式
請確認您鍵入一個分號!的每個SQL 命令結束時, sqlite3 程式時尋找一個分號知道您的SQL 命令如果省略分號, sqlite3 將給您繼續符如果提示, 等待輸入更多文本添加到當前SQL 命令此功能允許您要輸入SQL 橫跨多行例如:
sqlite > CREATE TABLE tbl2 (...> f1 varchar(30 )主鍵, ...> f2 文本....> f3 實數...> );sqlite >
除: 僅使用SQLITE_MASTER 表
將顯示"資料庫模式中的一個SQLite 資料庫是儲存在一個特殊的表格"sqlite_master "可以為特殊sqlite_master 表執行"SELECT "語句就像任何其他表在SQLite 資料庫例如:
$sqlite3 ex1 SQLite 版本3611 輸入"協助"有關說明sqlite > select *from sqlite_master ;類型=表名稱=tbl1 tbl_name =tbl1 rootpage =3sql =create table tbl1(one varchar(10) , 兩個smallint )sqlite >
但不能執行DROP TABLE, UPDATE, INSERT 或DELETE 對sqlite_master 表在sqlite_master 表自動為您建立或更新從資料庫中刪除表及索引不能手動修改sqlite_master 表
此模式的TEMPORARY 表沒有儲存在TEMPORARY "sqlite_master "表中的表是不可見的應用程式, 建立該表的應用程式此模式的TEMPORARY 表是儲存在另一個特殊的表格"sqlite_temp_master """sqlite_temp_master "表是臨時本身
特殊命令來sqlite3
在大多數情況下, sqlite3 上讀取的輸入, 並把它們拖到SQLite 庫為執行但是, 如果一個輸入行以點號("") 該行, 然後是截取和nocase sqlite3 程式本身"時, 通常使用這些"dot 命令來更改輸出的格式, 或要執行的某些內建的查詢的查詢語句
有關伺服器可用的點命令, 您可以輸入"協助"在任意時間例如:
sqlite > 協助備份? DB? FILE 備份DB (預設"main ")來FILE bail ON|OFF 停止後, 一個錯誤預設OFF 列表名的資料庫和檔案附加資料庫轉儲? TABLE? 轉儲到資料庫中SQL 文字格式迴音式ON|OFF 開啟或關閉命令回顯exit 退出該程式解釋ON|OFF 關閉或輸出模式適合於EXPLAIN genfkey ? OPTIONS? 選項有: --no-drop : 請不要刪除舊fkey 觸發器--ignore-errors : 忽略表提供fkey 錯誤--exec : 立即執行產生的SQL 請參閱檔案tool/genfkeyREADME 在源分發以獲得進一步的資訊header(s )ON|OFF 關閉或顯示的標題help 顯示此訊息匯入FILE TABLE 在FILE TABLE 用於分隔索引TABLE 只顯示指定的TABLE 上的所有索引iotrace FILE 啟用I/O 診斷記錄設定為FILE 載入FILE ? ENTRY? 載入擴充庫模式MODE ? TABLE? 設定輸出模式其中MODE 是以下值之一: csv 以逗號分隔的值列置中的列(參見寬度)html HTML < 表格> 代碼為TABLE 插入SQL insert 語句行每行對應一個值列表中的值用分號分隔分隔字串標籤tab-separated 值tcl TCL 列表元素nullvalue 將STRING 列印STRING 代替NULL 值輸出FILENAME 發送輸出以FILENAME 輸出stdout 發送輸出到工具提示MAIN CONTINUE 替換標準提示quit 退出該程式在FILENAME 讀取FILENAME 執行SQL 還原? DB? FILE 還原DB 內容(預設的"main ")從FILE 架構? TABLE? 顯示CREATE 語句輸出模式和使用的分隔字元STRING 更改分隔字元匯入顯示顯示當前的不同設定的值表? PATTERN? 列表中的名稱相匹配的表LIKE 圖案MS 請嘗試開啟MS 表鎖定毫秒後逾時定時器ON|OFF 關閉或CPU 計時器測量寬度NUM NUM設定"column 列寬"模式sqlite >
更改輸出格式
在sqlite3 程式能夠顯示查詢的結果在八種不同的格式: "csv ""column ""html ""insert ""line ""list ""tabs "和"tcl "可以使用"模式"點命令要切換這些輸出格式
輸出模式的預設設定是"list "在"位置"中, 每個記錄列表寫入一次查詢中每一行輸出和記錄是一個特定的分隔字元分隔的字串預設分隔符號是一個管道符號("| ")列出模式時特別有用建立一個查詢的輸出發送給其他程式(例如用於其他處理的AWK)
sqlite > 模式列表sqlite > select *from tbl1 ;hello|10 goodbye|20 sqlite >
可以使用"分隔字元"點命令更改分隔字元為列表模式例如, 要將插入一個逗號和空格, 您也可以這樣做:
sqlite > 分隔字元", "sqlite > select *from tbl1 ;"你好, 10 再見, 20 sqlite >
在"line "模式下, 每一個列與資料庫中的某行都在單獨一行每行由等號列名, 並進行適當的更改連續記錄通過一個空行分隔下面是一個例子模式行的輸出:
sqlite > 模式行sqlite > select *from tbl1 ;一個=hello 兩個=10 一個=再見兩個=20 sqlite >
在列模式中, 每個記錄都在單獨的一行中對齊與資料列例如:
sqlite > 模式列sqlite > select *from tbl1 ;一個兩個---------- ---------- hello 10 再見20 sqlite >
預設情況下, 每個列至少為10 個字元寬資料太大以適合列被截斷使用"可以調整列寬寬度&w"命令像這樣:
sqlite > 寬度12 6sqlite > select *from tbl1 ;一個兩個------------ ------ hello 10 再見20 sqlite >
"寬度&w"命令在以上樣本中第一列的寬度設為指定值.以12 並第三列的寬度為6要查看所有其他列寬可以給出任意數量的參數來"在必要時寬度&w"以指定的列寬的任意多個列在您的查詢結果
如果指定列的寬度值為0然後的列寬自動調整是最多隻能有三個數字: 10頁首的寬度首行的寬度, 並將該資料這將使列寬self-adjusting每一列的寬度設定此auto-adjusting 預設值為0值
標誌所在列的列標出現在前兩行輸出可以使用"開啟和關閉header"點命令在上面的樣本中, 欄標籤都在已開啟您也可以這樣做:
sqlite > 頁首處於關閉狀態sqlite > select *from tbl1 ;hello 10 再見20 sqlite >
另一個有用的輸出模式是"insert "在插入模式下, 則輸出將會在格式化為看起來像是SQL INSERT 語句可以使用insert 模式來產生可以用來輸入資料到不同的資料庫
當指定插入模式, 您要建立一個額外的參數的名稱輸入的表不存檔例如:
sqlite > 插入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 > s< TH > s和< TD > s是html輸出的模式為CGI _ganglia.py 標為很有用
將結果寫入一個檔案
預設情況下, sqlite3 會發送: 使用"可以更改此"命令的輸出只需將輸出檔案的名稱為一個參數輸出命令及所有後續查詢結果將寫入該檔案使用"輸出stdout "以開始寫入標準輸出例如:
sqlite > 模式列表sqlite > 分隔字元| sqlite > 輸出test_file_1文字檔txt sqlite > select *from tbl1 ;sqlite > 退出$cat test_file_1文字檔txt hello|10 goodbye|20 $
提交到資料庫模式
指定sqlite3 程式提供了幾個方便命令會非常有用啟動時, 模式的資料庫伺服器名無效文檔這些命令執行不能執行某些其他方式這些命令都提供了純粹作為一種捷徑
例如, 來查看資料庫中的表的列表, 可以輸入"表"
sqlite > 表tbl1 tbl2 sqlite >
"列表模式下表"命令類似於設定然後執行以下查詢:
SELECT 名稱FROM sqlite_master WHERE IN 類型('able '', ''view ")AND NOT LIKE '��qlite_% "UNION ALL SELECT 名稱FROM sqlite_temp_master WHERE IN 類型('able '', ''view '' )ORDER BY 1
實際上, 如果您這樣的原始碼樹sqlite3 程式(在列表中找到檔案src/shellc )您將發現完全符合上面的查詢
"用於分隔索引的工作方式類似"命令來列出所有索引的表中"用於分隔索引"命令接受一個參數, 它是該名稱表的索引不正確last, 但不能有, 為"架構"命令不帶參數, 則"架構"命令顯示原始CREATE TABLE 和CREATE INDEX 語句被用來產生當前的資料庫如果允許使用者名稱稱"架構", 它展示了在原始CREATE 語句用於將該表和全部如果它的索引我們有:
sqlite > 架構create table tbl1(one varchar(10) , 兩個smallint )CREATE TABLE tbl2 (f1 varchar(30 )主鍵, f2 文本.f3 實數)sqlite > 架構tbl2 CREATE TABLE tbl2 (f1 varchar(30 )主鍵, f2 文本.f3 實數)sqlite >
"架構"命令完成設定效果相同的列表模式, 則輸入以下查詢:
SELECT sql FROM (SELECT *FROM sqlite_master UNION ALL SELECT *FROM sqlite_temp_master )WHERE type!= ''meta "ORDER BY tbl_name , 請輸入DESC, 名
或者, 如果您給出的參數"架構", 因為您只想要為單個表架構, 該查詢是這個樣子:
SELECT sql FROM (SELECT *FROM sqlite_master UNION ALL SELECT *FROM sqlite_temp_master )WHERE type!= ''meta "AND sql NOT NULL AND 名稱NOT LIKE '��qlite_% "ORDER BY substr(type, 2, 1) , 名稱
您可以提供一個參數bcp命令如果您, 查詢是這個樣子:
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 名稱NOT LIKE '��qlite_% "ORDER BY substr(type, 2, 1) , 名稱
在查詢中的"%s "被替換參數這允許您查看模式對於某些子集的資料庫
sqlite > 架構%abc%
沿著這些同樣的, 而"表"命令也接受一個模式作為其第一個參數如果您給出參數設為表格命令, 一個"% "追加和instr 與LIKE 子句添加到查詢這允許您僅列出這些表, 以匹配特定樣式
"databases "命令顯示了所有在當前串連開啟的資料庫總是至少有2第一個為"main ", 則未經處理資料庫中開啟第二個是"temp ", 該資料庫用於暫存資料表可能還有其他資料庫中列出的資料庫附加使用ATTACH 語句第一個輸出資料行是附加到的名稱, 第二個列是外部檔案的檔案名稱
sqlite > 資料庫
將整個資料庫轉換為一個ASCII 文本的檔案
使用"轉儲命令將整個資料庫的內容複寫到單個ASCII 文字檔該檔案可以轉換回資料庫的管道其返回到sqlite3 .
請在存檔複製一個很好的方式與此資料庫:
$echo ''轉儲"| sqlite3 ex1 | gzip -c> ex1轉儲gz
這產生一個名為ex1轉儲gz包含createbackup 所需要的一切東西的資料庫, 或另一個機器上createbackup資料庫時, 只需輸入:
$zcat ex1轉儲gz| sqlite3 ex2
文字格式為純SQL 因此, 您還可以使用轉儲命令將匯出到在應用程式配置中設定的SQLite 資料庫到其他常用的SQL 資料庫引擎像這樣:
$資料庫叢集ex2 $sqlite3 ex1轉儲| psql ex2
其他點命令
"解釋"點可以使用下面的命令將輸出模式設定為"column "並設定列寬設定為合理的每個值都在一個EXPLAIN 命令的輸出EXPLAIN命令是一個SQLite-specific SQL 擴充外掛程式後台模式如果任何常規SQL scs 的EXPLAIN, 然後鍵入SQL 命令被解析, 但不執行虛擬機器指令序列的條件時, 將已被用於執行SQL 命令返回查詢結果, 如下所示: 例如:
sqlite > 解釋sqlite > 解釋tbl1 刪除, 其中兩個< 20 ;addr opcode p1 p2 p3 ---- ------------ ----- ----- ------------------------------------- 0ListOpen 001開啟01tbl1 2下一頁0╟93〗欄位014整數20 05ge 026鍵007ListWrite 008goto 029noop 0010 ListRewind 0011 ListRead 014 12 刪除0013 goto 011 14 ListClose 00
"逾時"命令設定的時間sqlite3 程式將等待對檔案的鎖定來清除它正試圖訪問一個錯誤返回之前將逾時的預設值零, 以便立即返回一個錯誤如果任何所需的資料庫表或索引已被鎖定
最後, 我們提及"退出"命令導致sqlite3 程式退出
使用sqlite3 在shell 指令碼
使用sqlite3 在shell 指令碼的一種方法是使用"echo "或""cat "來產生一個檔案中的一系列命令然後調用的單元測試將從產生的命令檔案的輸入此依舊無法正常啟動並執行是大多數情況下但作為附加的方便, sqlite3 允許單個SQL 命令在命令列輸入的值為第二個參數在資料庫的名稱當啟動sqlite3 程式時, 使用兩個參數第二個參數將被傳遞到SQLite 庫為處理在標準輸出上列印查詢的結果在列表中.模式和這種機制是專為協助sqlite3 便於使用的程式, 如"awk "結合使用例如:
$sqlite3 ex1 '��elect *從tbl1 "| > awk '{printf " < tr > < td > %s < td > %sn",$1,$2 }'< tr > < td > hello < td > 10 < tr > < td > 再見< td > 20 $
結束shell 命令
SQLite 命令通常由分號終止在shell 也可以使用word "GO "(不區分大小寫), 也可以是一個斜杠字元"/ "變得雜亂結束命令以下是由SQL server 和oracle , 值定義這些無法工作sqlite3_exec( )通過shell , 因為這些轉換為一個分號傳遞到該功能之前
將sqlite3 編譯器從源
原始碼到命令列sqlite3 介面中的單個名為"shell可以確定c"下載從SQLite 網站首先編譯此檔案(一起使用sqlite3 庫原始碼產生可執行檔例如:
gcc -osqlite3 shellc sqlite3c -ldl -lpthread