导读:本期聚焦于宋承宪创作的《如何高效使用SQLite命令行工具sqlite3?从入门到常用操作详解》,敬请观看详情。初次接触SQLite的开发者往往依赖图形化界面,一旦环境只有终端,就会手足无措。sqlite3作为官方自带的命令行工具,其实提供了完整的数据库管理能力,从建库建表、数据增删改查,到CSV导入导出、数据库备份,全部可以在终端中完成。本文从启动数据库、执行SQL语句、使用元命令到数据导入导出与实用配置,系统梳理sqlite3的常用命令与操作技巧,结合大量可直接运行的示例,帮助你脱离图形界面也能流畅管理SQLite数据库,尤其适合服务器运维、自动化脚本编写以及嵌入式开发场景。

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

如何高效使用SQLite命令行工具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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。