十分钟掌握SQLite操作
2016-01-09 10:45:13 | 来源:玩转帮会 | 投稿:佚名 | 编辑:小柯

原标题:十分钟掌握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

tags:

上一篇  下一篇

相关:

苹果搜索联想词又成ASO风口,展现逻辑到底如何?

前天有一篇关于搜索联想词分享在圈内激起千层浪,一度引起全民热议,不到一天时间竟有上百位朋友向我咨询操

戴维斯又伤了 这次飞进观众席

安东尼戴维斯一边摸着背部,一边黯然走出球场接受治疗。(美联社) 鹈鹕明星前锋安东尼戴维斯本季真的灾难连

嘎嘎性能力超猛?遭打脸15公分不持久

嘎嘎据传下面「15公分」床上功夫一流,却遭打脸不持久。(图/本报系资料照) 「MP魔幻力量」主唱嘎嘎丑闻

拥有这10件单品 分分钟成型男


你或许为每日的穿着发愁很多年了?!要想成为时尚型男,冬季必备这10样单品,即便离穿衣品位大师还

佐纳利男装第三代店铺形象:2016时尚与精彩继续


经过一个多月的精心准备和筹划,ZENL佐纳利风尚男装以全新的第三代形象,于2016年元月6日在佛山南海

诺威兹基生涯1300场出赛 史上第16

小牛球星诺维兹基生涯正式出赛1300场。(美联社资料照) 小牛「德国坦克」诺威兹基今天达到个人生涯另一里程

热烈祝贺【EXUN时尚C°】贵州铜仁1月8日盛大开业


正因为大家的需求,所以才会多成千上万的店铺营业,满足于每一位顾客。而衣讯品牌女装越来越受到广

NEW 新品1A ‖ 活力悠游 · 玩味春意


春意来袭,迈开步伐来一次惬意之旅,边工作边旅行,感受心灵与身心完美超脱。摆脱单调空间,融入自

萌翻了! 梁静茹的儿子长大了!

梁静茹的儿子Anderson已经是个小帅哥了!(图/取材自梁静茹、赵元同微博) 马来西亚歌手梁静茹的商人老公赵

奔跑吧兄弟20160108期何穗出场穿的黑色长裙是什么牌子

在《奔跑吧兄弟》中,各种各样的“女神”早已屡见不鲜,不过本期“澳洲特辑”

站长推荐: