sqlite3 工具
该sqlite3工具是一个基于终端的 SQLite 库前端,可以交互方式评估查询并以多种格式显示结果。它也可以用于脚本中。
在终端屏幕上,我们看到该工具的以下提示sqlite3:
$ sqlite3
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
连接到临时内存数据库。
使用“.open FILENAME”在持久数据库上重新打开。
该.help命令是该工具的元命令之一sqlite3;它列出了所有元命令。.exit和.quit命令退出sqlite3会话。我们也可以使用Ctrl+D组合键退出sqlite3。 该.databases命令显示附加的数据库。 该.tables命令列出可用的表。
+清除屏幕,+清除当前行。(使用 readline 库构建时。Ctrl)LCtrlU
使用 sqlite3 创建数据库
完整的 SQLite 数据库存储在单个跨平台磁盘文件中。我们使用sqlite3命令行工具创建一个新的数据库文件。
$ sqlite3 测试.db
这里我们创建一个新的test.db数据库。如果文件存在,则打开它。
基本 sqlite3 元命令
接下来我们描述该工具的一些元命令sqlite3。
sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单
该.tables命令显示可用的表。
sqlite> 从朋友中选择*;
1|简|F
2|托马斯|M
3|富兰克林|M
4|伊丽莎白|F
5|玛丽|F
6|露西|F
7|杰克|M
这里我们得到了一个语句的输出SELECT。默认情况下,输出模式为line,分隔符为|。
sqlite> .分隔符:
sqlite> 从朋友中选择*;
1:简:F
2:托马斯:M
3:富兰克林:M
4:伊丽莎白:F
5:玛丽:F
6:露西:F
7:杰克:M
这里我们使用了一个新的冒号分隔符。
还有几种其他的输出模式可供选择。以下示例显示了 column输出模式。
sqlite> .mode 列
sqlite> .headers 开启
sqlite> 从朋友中选择*;
身份证 姓名 性别
---------- ---------- ----------
1 简·F
2 托马斯·M
3 富兰克林
4 伊丽莎白F
5 玛丽F
6 露西F
7 杰克·M
此示例显示了在 sqlite 的列模式下数据是如何格式化的。该.headers命令还用于显示列标题。默认情况下,标题是隐藏的。
该.width命令调整列的大小。(此元命令仅与列模式下的表相关。)
sqlite> 从作者自然连接书籍中选择姓名、标题;
姓名 职称
----------- ----------
简·奥斯汀·艾玛
列夫·托尔斯泰 战争与和平
约瑟夫地狱捕手 XII
查尔斯·迪克·戴维·科普
约瑟夫·赫尔 表现不错
列夫·托尔斯泰 安娜·卡伦
列宽不够,无法正确显示所有数据。
sqlite> .宽度 15 18
sqlite> 从作者自然连接书籍中选择姓名、标题;
姓名 职称
--------------- ------------------
简·奥斯汀·艾玛
列夫·托尔斯泰 战争与和平
约瑟夫·海勒 第十二条军规
查尔斯·狄更斯 大卫·科波菲尔
约瑟夫·海勒 好如金
列夫·托尔斯泰 安娜·卡列尼娅
这里我们改变列宽。第一列为 15 个字符宽,第二列为 18 个字符宽。
sqlite> .shell清除
该.shell命令执行系统程序。在我们的例子中,我们用该命令清除屏幕clear。(Windows 上的等效命令是cls。)
sqlite> .显示
回音:关闭
设备:关闭
解释:自动
标题:开启
模式:列
空值:“”
输出:stdout
折叠分隔符:“|”
行分隔符:“\n”
状态:关闭
宽度:15 18
文件名:testdb
该.show命令列出了各种设置。其中包括输出模式、列表模式中使用的分隔符以及标题是否打开。
sqlite> .schema 汽车
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);
该.schema命令显示了表的结构。它提供了创建表的 DDL SQL。
可以sqlite3使用.prompt命令来改变的提示。
sqlite> .prompt“>” “。”
> 选择 * 从汽车
. 限制2;
ID 名称 价格
---------- ---------- ----------
1 奥迪 52642
2 奔驰 57127
>
有两个提示。一个是主提示,另一个是继续提示。默认的主提示是sqlite> ,默认的继续提示是...>。
从 shell 执行 SQL
我们可以从 shell 执行 SQL 命令。
$ sqlite3 test.db“从汽车中选择*;”
1|奥迪|52642
2|奔驰|57127
3|斯柯达|9000
4|沃尔沃|29000
5|宾利|350000
6|雪铁龙|21000
7|悍马|41400
8|大众|21600
这里我们非交互地执行了一条SELECT语句;表中的所有汽车都Cars被选中了。
转储表
可以将 SQL 格式的表转储到磁盘。这样我们就可以轻松保存数据库表的结构和数据。
我们有汽车表。
sqlite> 从汽车中选择*;
ID 名称 价格
---------- ---------- ----------
1 奥迪 52642
2 奔驰 57127
3、斯柯达9000
4.沃尔沃29000
5 宾利 350000
6、雪铁龙21000
7、悍马 41400
8、大众 21600
我们将使用.dump命令来转储表。
sqlite> .dump 汽车
PRAGMA foreign_keys=OFF;
开始交易;
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);
插入“汽车”值(1,'奥迪',52642);
插入“汽车”值(2,'Mercedes',57127);
插入“汽车”值(3,'斯柯达',9000);
插入“汽车”值(4,'沃尔沃',29000);
插入“汽车”值(5,'宾利',350000);
插入“汽车”值(6,'雪铁龙',21000);
插入“汽车”值(7,'悍马',41400);
插入“汽车”值(8,'大众',21600);
犯罪;
该.dump命令向我们展示了创建表所需的 SQL Cars。
sqlite> .输出 cars2.sql
sqlite> .dump 汽车
我们还可以将输出重定向到文件。该.output 命令将把输出重定向到cars2.sql文件。
$ cat cars2.sql
PRAGMA foreign_keys=OFF;
开始交易;
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);
插入“汽车”值(1,'奥迪',52642);
...
cars2.sql我们用命令显示文件的内容cat 。
读取 SQL
我们可以用命令从文件名中读取SQL语句.read。
sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单
sqlite> 删除表汽车;
sqlite> .表
作者 客户 订单
图书 朋友 预订
sqlite> .读取汽车.sql
sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单
sqlite> 从汽车中选择*其中 Id=1;
ID 名称 价格
---------- ---------- ----------
1 奥迪 52642
这里我们执行了一系列命令。我们删除表并从中读取它cars.sql。
.sqlite_history 文件
命令和语句存档在.sqlite_history文件中。该文件位于主目录中。
$ tail -5 ~/.sqlite_history
.表格
从汽车中选择*;
.mode 列
.headers 开启
。展示
使用该tail命令,我们显示最后五个条目。
资源文件
该sqlite3工具有一个名为的资源文件.sqliterc。它位于主目录中。如果没有这样的文件,我们可以简单地创建它。资源文件可以包含元命令或常规 SQL 语句。但是,我们应避免在文件中使用 SQL。
$ cat.sqliterc
.mode 列
.headers 开启
.空值 NULL
这是一个资源文件的简单示例。它有三个元命令。有了资源文件,我们在启动工具时就不必再重新执行元命令了sqlite3。它们将在工具启动时自动执行。
$ sqlite3 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
我们收到一条消息,提示该工具在开始时就加载了资源。
命令行选项
该工具有多个命令行选项。它们大多重复元命令。请注意,命令行选项会覆盖资源文件元命令。
$ sqlite3--帮助
-- 从 /home/janbodnar/.sqliterc 加载资源
用法:sqlite3 [选项] 文件名 [SQL]
FILENAME 是 SQLite 数据库的名称。将创建一个新数据库
如果该文件先前不存在。
选项包括:
-ascii 将输出模式设置为‘ascii’
-bail 发生错误后停止
-batch 强制批量 I/O
-column 将输出模式设置为“column”
-cmd COMMAND 在读取标准输入之前运行“COMMAND”
-csv 将输出模式设置为“csv”
-echo 执行前打印命令
-init FILENAME 读取/处理命名文件
-[no]header 打开或关闭标题
-help 显示此消息
-html 将输出模式设置为 HTML
-interactive 强制交互 I/O
-line 将输出模式设置为‘line’
-list 将输出模式设置为‘list’
-lookaside SIZE N 使用 N 个 SZ 字节作为后备内存
-mmap N 默认 mmap 大小设置为 N
-newline SEP 设置输出行分隔符。默认值:'\n'
-nullvalue TEXT 设置 NULL 值的文本字符串。默认为 ''
-pagecache SIZE N 使用 N 个 SZ 字节槽作为页缓存内存。
-scratch SIZE N 使用 N 个 SZ 字节槽作为临时内存
-separator SEP 设置输出列分隔符。默认值:'|'
-stats 在每次完成之前打印内存统计信息
-version显示 SQLite 版本
-vfs NAME 使用 NAME 作为默认 VFS
该--help选项为我们提供了所有可用选项的列表及其简短说明。
$ sqlite3 -echo -line -n?oheader 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
sqlite> 选择 * 从汽车限制 2;
从汽车中选择*限制2;
ID = 1
名称 = Audi
价格 = 52642
ID = 2
名称 = Mercedes
价格 = 57127
我们使用 、 和 选项启动该工具 。sqlite3启动后 ,语句会重复/回显。输出处于行模式,并且没有显示标题。-echo-line-noheaderSELECT
$ sqlite3-版本
-- 从 /home/janbodnar/.sqliterc 加载资源
3.16.2 2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209
通过该-version选项我们可以获得 sqlite3 的版本。
$ sqlite3-html 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
sqlite> 选择 * 从汽车限制 2;
身份证
姓名
价格
1
奥迪
52642
2
梅赛德斯
57127
通过该-html选项,我们可以将结果输出为简单的 HTML 表。
在 SQLite 教程的这一部分中,我们使用了sqlite3命令行工具。我们描述了各种元命令,展示了如何转储表以及如何从文件中读取 SQL。我们提到了 sqlite 的历史记录和资源文件。