专栏首页技术小黑屋十分钟掌握SQLite操作

十分钟掌握SQLite操作

最近用Ruby写了一个七牛的demo参赛作品,使用了sqlite3,用到很多操作,利用假期的时间,简单做一个快速掌握SQLite命令的小入门。

SQLite是一个开放源代码的数据库引擎,具有独立,无服务器依赖,零配置,支持事务等特点。SQLite一直以轻量级为特点,在移动和嵌入式设备上使用广泛,官方称其是世界上部署最广泛的数据库引擎。

本文主要侧重部分常用操作命令的介绍。试图以最简单的示例来展示如何操作。

强大的命令集

首先我们看一下sqlite3提供了哪些强大的命令。

fileos:false

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

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语句之中
  • 命令不识别注释

常用操作

创建一个数据库文件

fileos:false

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

#找一个不存在的文件 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)

打开已存在的数据库文件

fileos:false

1

22:56:15-androidyue~ $ sqlite3 database_file.db

查看数据库

fileos:false

1 2 3 4 5

sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/androidyue/qiniu/.qiniu.db 1 temp

查看数据表

fileos:false

1 2

sqlite> .tables qn_uploaded

查看建表语句

fileos:false

1 2

sqlite> .schema qn_uploaded CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);

显示字段名称

fileos:false

1 2 3 4 5 6 7 8 9

#没有开启 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

导出数据表结构和数据(文本形式)

fileos:false

1 2 3 4 5 6

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处理)时,会事半功倍。

列表模式输出

fileos:false

1 2

sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964

修改列表模式分割符

fileos:false

1 2 3

sqlite> .separator ", " sqlite> select * from qn_uploaded; /home/androidyue/Documents/octopress/public//images/email.png, droidyue, 1410096518.43964

使用Line模式

每行的输出格式为 字段名 = 字段值

fileos:false

1 2 3 4 5

sqlite> .mode line sqlite> select * from qn_uploaded; filePath = /home/androidyue/Documents/octopress/public//images/email.png bucket = droidyue lastModified = 1410096518.43964

使用列模式

fileos:false

1 2 3 4

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可以将输出结果定向到文件中。

fileos:false

1 2 3 4 5 6 7 8

sqlite> .output /tmp/test.txt 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

备份和恢复

备份

fileos:false

1 2

#语法 .backup ?DB? FILE Backup DB (default "main") to FILE sqlite> .backup main /tmp/main.txt

恢复

fileos:false

1 2

#语法.restore ?DB? FILE Restore content of DB (default "main") from FILE .restore main /tmp/main.txt

其他

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关闭Mac屏幕右上角QQ通知

    前段时间看到QQ提示更新,于是手贱了一次升级到了QQ for Mac V4.0.1,最不爽的一件事在屏幕的右上角多出来了一个横幅,内容就是别人发给你的消息的内容...

    技术小黑屋
  • 研究学习Kotlin的一些方法

    Kotlin是一门让人感到很舒服的语言,相比Java来说,它更加简洁,省去了琐琐碎碎的语法工作,同时了提供了类似Lambda,String template,N...

    技术小黑屋
  • Octopress添加回到顶部功能

    在Octopress当阅读到文章底部的时候,或多或少都想回到顶部,而默认的Octopress没有提供回到顶部的功能,于是一不做二不休,自己找个控件加上。

    技术小黑屋
  • 数据分析、数据挖掘、数据运营有啥区别?【通俗版】

    在医院陪护老婆已经一周了,与医生、化验、护士相处一周以后,发现这不就是数据分析、数据挖掘、数据运营间的关系吗!特此mark,让新同学快速理解一下。

    接地气的陈老师
  • Day13 :调整数组顺序使奇数位于偶数前面

    思路一:   根据题意可知,我们不仅要让奇数在偶数的前面,还要考虑奇数和偶数原来的相对位置不变。因此我们首先要寻找第一个奇数,并将其放在0号位置。然后将第一个...

    stefan666
  • shell程序设计的流程控制

    变量名可以是用户选择的任何字符串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。如果省略了in,则变量var的取值将是位置参数。...

    心跳包
  • H3C Qos概述

        QoS( Quality of Service,服务质量)用于评估服务方满足客户服务需求的能力。在 Internet 中,QoS 所评估的就是网络转发分...

    py3study
  • Spring MVC入门

    Spring的Web框架就是为解决在web开发中遇到如一系列问题而设计的。 SpringMVC基于模型-视图-控制器( Model-View-Controlle...

    栋先生
  • MPSUM:基于谓词匹配的实体摘要(CS IR)

    随着语义网的发展,为现实世界中的实体生成具体实体摘要已经成为新兴任务。为了解决这个问题,我们提出了一个名为MPSUM的方法,它结合谓词唯一性和对象重要性的思想来...

    Elva
  • 自动测试失败的5个原因

    测试自动化正在不断普及,也是公司快速有效地部署应用程序的好方法。但是,无论是要进行初始投资还是要扩展自动化工作,测试自动化都会带来某些看似艰巨的挑战。

    FunTester

扫码关注云+社区

领取腾讯云代金券