+ -

SQLite 命令行工具sqlite3使用

SQLite教程以最新的SQLite版本version 3.33.0(2020-08-20)为基础,带你学习和了解最新的SQLite语法及使用。
本教程类含有大量的测试用例,都是本人亲测,简单好用,是你学习和参考的好帮手。
加入字节流官方QQ群:952873936或联系站长进行技术交流。

SQLite数据库(文件)的创建可通过sqlite工具来实现,这里我们使用sqlite3命令行工具来实现。

创建SQLite数据库是不需要额外的任何权限的,你只需要对sqlite3工具具有可执行权限和对需要存储的文件夹具有编辑权限的基本权限。

创建数据库

在命令行中运行sqlite3时,跟随一个数据名,sqlite3运行后会自动创建该数据库。

如果传入的数据库名已经存在,则打开该数据库,相当于sqlite的.open命令。

c:\bytekits\sqlite>sqlite3 bytekits.db
SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
sqlite>

此时会在sqlite3同目录下创建一个bytekits.db的数据库。
我们可以使用.database命令列出数据库的名称及其所依附的文件。

sqlite> .databases
main: c:\bytekits\sqlite\bytekits.db
sqlite>

SQLite使用分号;来表示一条sql语句或者命令的结束,如果输入后省略掉分号,sqlite3将会继续提示等待用户输入,直到遇到分号;。如我们在当前数据库bytekits创建一个表t-web。

sqlite> create table t_web(
   ...> id interger primary key,
   ...> name varchar(100)
   ...> );

切换或打开新数据库

可以使用.open关闭当前数据库,然后打开新的数据库。
如我们打开sqlite3不传递参数时,系统使用默认main函数库,我们可以使用.open进行切换,然后使用.databases显示当前数据库依赖。

C:\bytekits\sqlite>sqlite3
SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .databases
main:
sqlite> .open bytekits.db
sqlite> .databases
main: C:\bytekits\sqlite\bytekits.db
sqlite>

sqlite当前运行配置信息

使用.show命令显示当前sqlite3的环境配置。

sqlite> .show
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: stdout
colseparator: "|"
rowseparator: "\n"
       stats: off
       width:
    filename: bytekits.db

可以看到,显示的当前配置参数还是很丰富的,包括我们后面常用的各种配置参数。

显示当前数据库中的表

我们可以通过.tables命令来显示当前数据库中的表

sqlite> .tables
t_web
sqlite>

当然如果表过多,我们可以使用如sql语句中like的方式来过滤显示表。如这里我们显示表名中含有we字符的所有表。

sqlite> .tables %we%
t_web

数据库表结构

使用.schema命令可以显示表的结构。

sqlite> .schema t_web
CREATE TABLE t_web(
id interger primary key,
name varchar(100)
);

数据格式显示

在使用该命令前,我们先给t_web表中增加几条数据。

sqlite> insert into t_web(id,name) values
   ...> (1,'www.bytekits.com'),
   ...> (2,'wwww.google.com'),
   ...> (3,'www.baidu.com')
   ...> ;
sqlite>

sqlite3当前支持14种不同的数据格式:

  • ascii
  • csv
  • html
  • json
  • list
  • quote
  • tabs
  • box
  • column
  • insert
  • line
  • markdown
  • table
  • tcl

我们可以通过.mode命令修改显示格式

sqlite> select * from t_web;
1|www.bytekits.com
2|wwww.google.com
3|www.baidu.com

list模式,默认的分隔符为“|”,当然我们也可以使用.separator 来修改默认的分隔符。

sqlite> select * from t_web;
1,www.bytekits.com
2,wwww.google.com
3,www.baidu.com

column模式下,每条记录单独显示一行,并且按指定的宽度对齐。

sqlite> select * from t_web;
id  name
--  ----------------
1   www.bytekits.com
2   wwww.google.com
3   www.baidu.com

在column,box,table和markdown模式下,记录默认的宽度为0,即自适应,我们也可以通过.width命令来修改。
其中整数代表最小的字符数,默认为左对齐。如果整数为负数,则为右对齐。

sqlite> .width 4 -6
sqlite> select * from t_web;
id                name
----  ----------------
1     www.bytekits.com
2      wwww.google.com
3        www.baidu.com

表格输出的方式有box,markdown和table.

sqlite> .mode box
sqlite> select * from t_web;
┌────┬──────────────────┐
│ id │       name       │
├────┼──────────────────┤
│ 1  │ www.bytekits.com │
│ 2  │ wwww.google.com  │
│ 3  │ www.baidu.com    │
└────┴──────────────────┘
sqlite> .mode table
sqlite> select * from t_web;
+----+------------------+
| id |       name       |
+----+------------------+
| 1  | www.bytekits.com |
| 2  | wwww.google.com  |
| 3  | www.baidu.com    |
+----+------------------+
sqlite> .mode markdown
sqlite> select * from t_web;
| id |       name       |
|----|------------------|
| 1  | www.bytekits.com |
| 2  | wwww.google.com  |
| 3  | www.baidu.com    |

csv格式将各列按逗号”,”进行分隔

sqlite> .mode csv
sqlite> select * from t_web;
id,name
1,www.bytekits.com
2,wwww.google.com
3,www.baidu.com
sqlite>

html格式输出为html字符串

sqlite> .mode html
sqlite> select * from t_web;
<TR><TH>id</TH>
<TH>name</TH>
</TR>
<TR><TD>1</TD>
<TD>www.bytekits.com</TD>
</TR>
<TR><TD>2</TD>
<TD>wwww.google.com</TD>
</TR>
<TR><TD>3</TD>
<TD>www.baidu.com</TD>
</TR>

json格式输出json字符串

sqlite> .mode json
sqlite> select * from t_web;
[{"id":1,"name":"www.bytekits.com"},
{"id":2,"name":"wwww.google.com"},
{"id":3,"name":"www.baidu.com"}]

insert模式将按sql插入语句输出:

sqlite> .mode insert
sqlite> select * from t_web;
INSERT INTO "table"(id,name) VALUES(1,'www.bytekits.com');
INSERT INTO "table"(id,name) VALUES(2,'wwww.google.com');
INSERT INTO "table"(id,name) VALUES(3,'www.baidu.com');

表的备份

对于SQLite数据库中的表,可使用.dump命令来进行备份.

sqlite> .dump t_web
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t_web(
id interger primary key,
name varchar(100)
);
INSERT INTO t_web VALUES(1,'www.bytekits.com');
INSERT INTO t_web VALUES(2,'wwww.google.com');
INSERT INTO t_web VALUES(3,'www.baidu.com');
COMMIT;
sqlite>

修改输出打印

sqlite3默认的输出是stdout,即控制台输出。不过我们可以通过.output命令可以将输出重定向到文件。

sqlite> .output web.txt
sqlite> select * from t_web;
sqlite> .exit
C:\bytekits\sqlite>type web.txt
1|www.bytekits.com
2|wwww.google.com
3|www.baidu.com

如果需要恢复控制台输出,使用.output stdout即可。

sqlite> .output stdout

数据的导出

sqlite3支持excel格式的数据导出。

sqlite> .excel
sqlite> select * from t_web;

执行以上命令后,会打开excel,并将从t_web表中查询的数据填充到打开的excel中。

注意:查询的数据是否有表头取决于.heade 的on或off.

运行Shell命令

使用sqlite3时,有时需要临时运行shell命令,这时不得不退出sqlite3或者重新打开一个控制台来进行。
新版析 sqlite3提供了一个命令.shell用于在当前sqlite3环境下运行shell命令。
这里我们运行dir命令。

sqlite> .shell dir
 驱动器 C 中的卷是 系统
 卷的序列号是 D8DB-50EF

 C:\bytekits\sqlite 的目录

2020/09/04  16:06    <DIR>          .
2020/09/04  16:06    <DIR>          ..
2020/09/04  16:06                 0 .databases
2020/09/04  16:06                 0 .open
2020/09/04  00:05            12,288 bytekits.db
2020/08/14  20:44           521,728 sqldiff.exe
2020/09/03  15:44         2,059,296 sqlite-tools-linux-x86-3330000.zip
2020/08/14  20:45           987,136 sqlite3.exe
2020/08/14  20:44         2,037,248 sqlite3_analyzer.exe
2020/09/04  13:11                53 web.txt
               8 个文件      5,617,749 字节
               2 个目录 90,302,357,504 可用字节
sqlite>

数据库信息.dbinfo

使用.dbinfo命令可以查看当前数据库的状态信息。

sqlite> .dbinfo
database page size:  4096
write format:        1
read format:         1
reserved bytes:      0
file change counter: 4
database page count: 3
freelist page count: 0
schema cookie:       1
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        0
application id:      0
software version:    3033000
number of tables:    1
number of indexes:   1
number of triggers:  0
number of views:     0
schema size:         64
data version         1
字节流是站长多年来的工作经验和技术总结,和站长一起学习,每天都有进步。
通俗易懂,深入浅出。
文章不深奥,不需要钻研,不烧脑细胞,人人都可以学习,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!