十分鐘掌握SQLite操作
最近用Ruby寫了一個七牛的demo參賽作品,使用了sqlite3,用到很多操作,利用假期的時間,簡單做一個快速掌握SQLite命令的小入門。
SQLite是一個開放源代碼的數據庫引擎,具有獨立,無服務器依賴,零配置,支持事務等特點。SQLite一直以輕量級為特點,在移動和嵌入式設備上使用廣泛,官方稱其是世界上部署最廣泛的數據庫引擎。
本文主要側重部分常用操作命令的介紹。試圖以最簡單的示例來展示如何操作。
強大的命令集
首先我們看一下sqlite3提供了哪些強大的命令。
sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .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 If TABLE specified, only dump tables matching LIKE pattern TABLE. .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. With no args, it turns EXPLAIN on. .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 If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .load FILE ?ENTRY? Load an extension library .log FILE|off Turn logging on or off. FILE can be stderr/stdout .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 .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements If TABLE specified, only show tables matching LIKE pattern TABLE. .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .stats ON|OFF Turn stats on or off .tables ?TABLE? List names of tables If TABLE specified, only list tables matching LIKE pattern TABLE. .timeout MS Try opening locked tables for MS milliseconds .vfsname ?AUX? Print the name of the VFS stack .width NUM1 NUM2 ... Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off sqlite>
以”.“開始的命令規則
看到了上面的全部命令,可以觀察到,所有的命令都是以”.“開始的。而常用的SQL語句是格式自由的,并且可以跨越多行,空白字符(whitespace)和注釋可以出現在任何地方。而SQLite中以.開始的命令有更多的限制,具體如下
- 所有命令以 . 開始,并且 . 的左側不包含任何空白字符
- 所有命令必須全部包含在一行輸入行中
- 所有命令不能出現在SQL語句之中
- 命令不識別注釋
常用操作
創建一個數據庫文件
#找一個不存在的文件 09:35:16-androidyue/tmp$ cat test.db cat: test.db: No such file or directory #使用sqlite3 想要創建的數據庫文件 09:35:28-androidyue/tmp$ sqlite3 test.db #進入sqlite,執行建表語句 sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT); #退出SQLite sqlite> .exit #查看指定的文件,創建成功 09:42:26-androidyue/tmp$ cat test.db 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
打開已存在的數據庫文件
22:56:15-androidyue~ $ sqlite3 database_file.db
查看數據庫
sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/androidyue/qiniu/.qiniu.db 1 temp
查看數據表
sqlite> .tables qn_uploaded
查看建表語句
sqlite> .schema qn_uploaded CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
顯示字段名稱
#沒有開啟 sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964 #開啟之后 sqlite> .header on sqlite> select * from qn_uploaded; filePath|bucket|lastModified /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964
導出數據表結構和數據(文本形式)
sqlite> .dump qn_uploaded PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT); INSERT INTO "qn_uploaded" VALUES('/home/androidyue/Documents/octopress/public/images/dotted-border.png','droidyue',1410096552.54864); COMMIT;
調整輸出
sqlite3程序可以使用八種不同的格式顯示結果。 這些格式是”csv”, “column”, “html”, “insert”, “line”, “list”, “tabs”, and “tcl”. 你可以使用.mode命令來進行切換輸出格式
默認的輸出模式list,使用了list模式,每條查詢結果記錄都會輸出到一行,每一列使用一個分割符分割,默認的分割符是 “|“,list模式有一個常用的使用情況,就是當你想對查詢結果記性額外處理(比如AWK處理)時,會事半功倍。
列表模式輸出
sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964
修改列表模式分割符
sqlite> .separator ", " sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png, droidyue, 1410096518.43964
使用Line模式
每行的輸出格式為 字段名 = 字段值
sqlite> .mode line sqlite> select * from qn_uploaded; filePath = /home/androidyue/Documents/octopress/public//images/email.png bucket = droidyue lastModified = 1410096518.43964
使用列模式
sqlite> .mode column sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png droidyue 1410096518.43964 /home/androidyue/Documents/octopress/public/images/rss.png droidyue 1410096552.54764
輸出內容
輸出結果
默認情況下,所有的查詢結果都是都是作為標準的輸出展示。使用.output可以將輸出結果定向到文件中。
sqlite> select * from qn_uploaded; sqlite> .exit 17:48:54-androidyue~/Documents/octopress/qiniu (master)$ cat /tmp/test.txt file bucket last ---- ------------- ---- /home/androidyue/Documents/octopress/public//images/email.png droidyue 1410096518.43964 /home/androidyue/Documents/octopress/public/images/rss.png droidyue 1410096552.54764
備份和恢復
備份
#語法 .backup ?DB? FILE Backup DB (default "main") to FILE sqlite> .backup main /tmp/main.txt
恢復
#語法.restore ?DB? FILE Restore content of DB (default "main") from FILE .restore main /tmp/main.txt
來源:技術小黑屋
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!