sqlite3 是 SQLite 数据库官方提供的命令行管理工具,几乎所有 SQLite 发行包都会附带这个可执行程序。它不依赖任何图形界面,可以在终端、SSH 会话、容器环境甚至嵌入式设备上直接运行。通过 sqlite3,你可以创建数据库、执行 SQL 语句、查看表结构、导入导出数据,甚至编写自动化脚本完成定期备份。掌握 sqlite3 的基本使用方法,对于数据库调试、服务器维护以及自动化任务非常关键。

一、启动 sqlite3 与打开/创建数据库
sqlite3 最基本的用法是在终端中执行 sqlite3 数据库文件名。如果指定的数据库文件不存在,sqlite3 会自动创建一个空的数据库文件;如果文件已经存在,则会打开它。进入交互模式后,终端会显示 sqlite> 提示符,等待用户输入 SQL 语句或元命令。
例如,要创建一个名为 test.db 的数据库并进入交互模式,可以执行以下命令:
sqlite3 test.db SQLite version 3.40.0 2022-11-16 12:10:08 Enter ".help" for usage hints. sqlite> .quit
如果不想进入交互模式,只想执行一条 SQL 语句后立即退出,可以将 SQL 作为参数传递给 sqlite3。这种方式在 shell 脚本中非常实用。例如,查询 users 表中的所有记录:
sqlite3 test.db "SELECT * FROM users;"
除了磁盘文件,sqlite3 还支持内存数据库。使用特殊名称 :memory: 可以创建一个只存在于内存中的临时数据库,程序退出后数据即消失,适合测试或临时计算。也可以使用空文件名(不提供任何参数)进入一个临时磁盘数据库,关闭后自动删除。
二、常用元命令(Dot Commands)详解
元命令是 sqlite3 交互环境中的特殊命令,以点号(.)开头,用于查看数据库结构、切换输出格式、导入导出数据等。这些命令不区分大小写,且不会发送给 SQLite 内核执行。输入 .help 可以列出所有可用的元命令及其简要说明。
查看当前已打开的数据库,使用 .databases。它会列出数据库名称、对应的文件路径以及读写状态。例如:
sqlite> .databases main: /home/user/test.db r/w
查看数据库中的所有表,使用 .tables。该命令支持使用 LIKE 模式过滤表名,例如 .tables '%user%' 只显示包含 user 的表。要查看某个表的结构,使用 .schema 表名,如果不指定表名则显示所有表的建表语句。此外,.indexes 表名 可以列出该表上的所有索引。
这些元命令属于 sqlite3 客户端功能,并不是 SQL 的一部分。在编写自动化脚本时,可以通过将元命令与 SQL 混合写入同一个输入流来执行。例如,使用管道将多行命令传给 sqlite3:
echo -e ".tables\n.schema users" | sqlite3 test.db
上面的示例中,反斜杠 n 表示换行符,在 shell 中用于分隔两条元命令。如果使用 Windows 命令提示符,管道和 echo 的语法略有不同,但元命令本身保持一致。
三、执行 SQL 语句与数据操作
在 sqlite3 交互模式下,可以直接输入任何合法的 SQL 语句,以分号结束。SQL 语句可以跨越多行,sqlite3 会持续读取直到遇到分号才执行。例如,创建一个 books 表并插入两条记录:
CREATE TABLE books(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
price REAL
);
INSERT INTO books(title, price) VALUES('SQLite Guide', 29.99);
INSERT INTO books(title, price) VALUES('Database Design', 45.00);
SELECT * FROM books;
默认情况下,查询结果以竖线分隔的列表形式输出,列头不会显示。这种格式在终端中可读性一般。可以通过 .mode 命令切换输出格式,常用的模式包括 csv、column、html、insert、line、list 等。其中 column 模式会按列对齐输出,配合 .headers on 可以显示列标题,极大提升阅读体验。
例如,切换为 column 模式并显示列头:
sqlite> .mode column sqlite> .headers on sqlite> SELECT * FROM books; id title price -- --------------- ----- 1 SQLite Guide 29.99 2 Database Design 45.0
SQLite 是动态类型数据库,虽然建表时可以指定类型,但实际存储时并不强制。例如向 TEXT 列插入整数也能成功,这与 MySQL、PostgreSQL 等强类型数据库有显著差异。了解这一点可以避免在迁移数据库时产生困惑。另外,sqlite3 默认开启事务,多条 INSERT 语句可以放在 BEGIN 和 COMMIT 之间,大幅提升批量插入速度。
四、数据导入与导出
sqlite3 提供了多种方式实现数据迁移。最常用的元命令是 .import 文件名 表名,它可以将 CSV 文件的内容导入到指定表中。导入前通常需要先设置 .mode csv,否则数据可能按默认分隔符解析。如果表不存在,.import 会根据 CSV 的第一行自动创建表,但这种方式对数据类型推断有限,建议提前手动建表。
例如,将当前目录下的 data.csv 导入到 books 表:
sqlite3 test.db sqlite> .mode csv sqlite> .import data.csv books
导出数据则可以使用 .output 文件名 将后续查询结果写入文件,再通过 .output stdout 恢复终端输出。更简单的方式是使用 .dump 命令,它会生成包含建表语句和插入语句的完整 SQL 脚本,非常适合数据库备份或迁移。将输出重定向到文件即可得到备份:
sqlite3 test.db .dump > backup.sql
上面命令中的 > 是 shell 的输出重定向符号,在代码块中需要使用 HTML 实体 > 表示。实际在终端输入时直接写 > 即可。如果使用 Windows 命令行,路径中可能包含反斜杠,例如 C:\data\backup.sql,反斜杠需要原样保留,不要在代码中将其替换为正斜杠。
此外,sqlite3 还提供了 .backup 元命令,可以在线备份当前数据库到另一个文件,比 .dump 更适合大型数据库。例如:
sqlite3 test.db ".backup backup.db"
这种备份方式不会锁定数据库,可以在服务运行期间执行。结合 shell 脚本和 cron 定时任务,可以实现自动化的数据库备份策略。
五、sqlite3 配置与实用技巧
sqlite3 在启动时会自动读取用户主目录下的 .sqliterc 文件,并执行其中的元命令。利用这个特性,可以将常用的输出格式、列头显示等配置写入该文件,每次启动自动生效。例如,在 .sqliterc 中写入以下两行:
.mode column .headers on
这样每次进入 sqlite3 交互模式,查询结果都会以列对齐方式显示,并且列头可见,省去每次手动设置的麻烦。配置文件中的命令每行一条,支持所有元命令,但不能包含 SQL 语句。
另一个实用技巧是使用 .timer on 显示每条 SQL 语句的执行时间,对于性能调优非常有帮助。使用 .explain on 可以输出查询计划,帮助理解索引的使用情况。如果需要加载扩展模块,可以使用 .load 路径,路径中若包含 Windows 反斜杠,同样必须保留,例如 C:\extensions\myext.dll。
在自动化场景中,可以使用 -cmd 参数在启动时执行元命令。例如,直接以 CSV 格式输出查询结果:
sqlite3 -cmd ".mode csv" -cmd ".headers on" test.db "SELECT * FROM books;"
这条命令会先执行两个 -cmd 指定的元命令,再执行 SQL 查询,非常适合在脚本中生成 CSV 报告。掌握这些配置和技巧后,sqlite3 就不再只是一个简单的查询工具,而是一个强大的命令行数据库管理平台。
sqlite3SQLite命令行工具数据库操作修改时间:2026-08-27 14:29:29