sqlite3 命令行(CLI)入门
本教程共 50 篇 · 第 5 篇 · 更新于 2026-07-31
05. sqlite3 命令行(CLI)入门
本节目标:学完本章你能启动
sqlite3、打开一个数据库文件、用点命令看清里面有哪些表和表结构,并把查询结果排版得清清爽爽。
sqlite3 是 SQLite 官方的命令行工具。它既是一个“数据库浏览器”,也是你练习 SQL 的操场。本章带你认识最常用的一批“点命令(dot-command)”——就是以英文句点 . 开头的那些特殊指令。它们是 SQLite CLI 的独家能力,能让你不写 SQL 就快速看库、看表、改输出格式。
启动与连接
直接敲 sqlite3 进入交互模式。如果不给文件名,连的是一块内存临时库:
$ sqlite3
SQLite version 3.53.4 2026-07-24 18:36:39
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
想直接打开(或新建)一个库文件,把文件名跟在后面:
sqlite3 mydb.db
如果这个文件不存在,SQLite 会自动创建一个。注意 Windows 路径要用正斜杠,例如 sqlite3 c:/work/mydb.db。
已经进入 CLI 后,也能用 .open 切换/打开文件:
sqlite> .open mydb.db
Warning直接
sqlite3不带文件名启动,连的是内存库,所有操作退出即丢。初学者常在里面建了表、插了数据,一关窗口全没了,还以为“SQLite 坏了”。要持久保存,务必启动时指定文件名,或先.open 文件名再操作。
.help:命令字典
不知道有哪些点命令?随时敲:
sqlite> .help
它会列出全部点命令(几十个)及用途。记不住全部没关系,本章讲的这几个最常用。要看某个命令的详细用法,可以 .help 命令名,例如 .help mode。
建两张示例表练手
为了演示后面的命令,我们先建两张贯穿全教程的示例表(注意 created_at 用的是 TEXT,日期按文本存,这是 SQLite 的推荐做法):
sqlite> CREATE TABLE users(
...> id INTEGER PRIMARY KEY,
...> name TEXT,
...> age INTEGER,
...> email TEXT
...> );
sqlite> CREATE TABLE orders(
...> id INTEGER PRIMARY KEY,
...> user_id INTEGER,
...> amount REAL,
...> created_at TEXT
...> );
sqlite> INSERT INTO users(id, name, age, email) VALUES
...> (1, '小明', 18, 'xiaoming@example.com'),
...> (2, '小红', 20, 'xiaohong@example.com');
sqlite> INSERT INTO orders(id, user_id, amount, created_at) VALUES
...> (1, 1, 99.5, '2026-07-31');
观察提示符变化:输 SQL 时以分号 ; 结束才执行;一行没写完会显示 ...> 续行提示。
.tables:列出所有表
想快速看看当前库里有哪些表:
sqlite> .tables
orders users
它把表名横排打印出来。如果你想按模式找,可以加参数(用 LIKE 模式匹配),例如 .tables user% 只列出以 user 开头的表。
Note点命令(如
.tables、.schema)和 SQL 语句是两套东西:点命令由sqlite3程序自己解释,SQL 才交给 SQLite 引擎执行。也因此,点命令不能用在你的程序代码(如 Python 的sqlite3库)里——程序里只能发 SQL。
.schema:查看表结构(建表语句)
光看表名不够,你想知道“表长什么样”,用 .schema:
sqlite> .schema users
CREATE TABLE users(
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
email TEXT
)
不带参数时,.schema 会打印整个库所有表的建表语句;带表名则只看这一张。还支持模式匹配,例如 .schema user%。
想看得更整齐,可以加 --indent:
sqlite> .schema --indent users
.mode:切换结果输出格式
默认情况下,查询结果用竖线 | 分隔,不太好看。.mode 用来切换排版:
sqlite> .mode column
sqlite> SELECT * FROM users;
1 小明 18 xiaoming@example.com
2 小红 20 xiaohong@example.com
常用模式有:
column:左对齐的列(配合.headers on最佳);box:用 Unicode 画框线,最直观(3.x 新版推荐);csv:逗号分隔,方便导给 Excel;list:默认,用分隔符(默认|)平铺;line:每行一个字段,适合窄屏;json/markdown/html:直接出对应格式,写文档很方便。
试一下 box 模式:
sqlite> .mode box
sqlite> SELECT * FROM users;
┌────┬────────┬─────┬─────────────────────┐
│ id │ name │ age │ email │
├────┼────────┼─────┼─────────────────────┤
│ 1 │ 小明 │ 18 │ xiaoming@example.com │
│ 2 │ 小红 │ 20 │ xiaohong@example.com │
└────┴────────┴─────┴─────────────────────┘
.headers:显示列名
.headers 控制是否打印列标题。默认是关的,打开后读结果更清楚:
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT id, name FROM users;
id name
---------- ----------
1 小明
2 小红
Tip把下面三行当成“清爽输出三连”记下来,每次进 CLI 先敲,查询结果立刻变好看:
.headers on→.mode column(或.mode box)→ 需要时.nullvalue NULL(把空值显示为NULL字样而不是空白)。
用不同格式看同一份数据
为了让你感受 .mode 的威力,下面用 orders 表同一句查询,换三种格式输出:
sqlite> .mode list
sqlite> SELECT * FROM orders;
1|1|99.5|2026-07-31
sqlite> .mode column
sqlite> .headers on
sqlite> SELECT * FROM orders;
id user_id amount created_at
---------- ---------- ---------- ----------
1 1 99.5 2026-07-31
sqlite> .mode box
sqlite> SELECT * FROM orders;
┌────┬─────────┬────────┬────────────┐
│ id │ user_id │ amount │ created_at │
├────┼─────────┼────────┼────────────┤
│ 1 │ 1 │ 99.5 │ 2026-07-31 │
└────┴─────────┴────────┴────────────┘
你可以看到:同样是三条信息,list 像原始管道文本,column 像对齐的报表,box 像画了框的表格。写笔记、贴文档时,box 和 markdown 模式最省心——markdown 直接输出 Markdown 表格源码,复制到教程里就能渲染。
还有个细节:如果某列是空值(NULL),默认显示成空白,容易和“空字符串”混淆。用 .nullvalue 指定一个标记字:
sqlite> .nullvalue NULL
sqlite> SELECT id, email FROM users;
1|xiaoming@example.com
2|xiaohong@example.com
(这里两行都有邮箱所以没体现,但如果某行 email 为空,就会显示为 NULL 字样,一眼能区分。)
一个典型日常流程
把前面学的串成一套最常用的开场动作:
sqlite> .open demo.db -- 打开(或新建)库文件
sqlite> .tables -- 看看里面有哪些表
sqlite> .schema users -- 看 users 表结构
sqlite> .headers on -- 开列名
sqlite> .mode box -- 用方框格式
sqlite> SELECT * FROM users; -- 真正查数据(别忘了分号)
这套流程你每天都会重复:开库 → 看表 → 看结构 → 设格式 → 查数据。敲顺了,CLI 比很多图形工具还快。
退出与一点重要规则
退出 CLI 用 .quit 或 .exit,也可以按 Ctrl+D(Unix)/ Ctrl+C(Windows 中断当前语句)。
务必记住一条铁律:
点命令以点
.开头、结尾不要分号;SQL 语句以分号;结束。
比如 .tables 正确,写 .tables; 多余(新版本会忽略,但习惯上不加);而 SELECT * FROM users 必须补 ; 才会执行,否则 CLI 会一直等你输入续行。
Warning点命令必须顶格、前面不能有空格,且必须写在同一行。如果你在它前面不小心打了空格,SQLite 会把它当成普通 SQL 去执行,结果报错“near “.tables”: syntax error”。新手 90% 的“命令不认”都栽在这。
其他顺手的点命令(了解即可)
.databases:列出当前连接打开了哪些库文件(至少有main和temp)。.indexes:列出索引;.indexes 表名只看某表的索引。.dump:把整个库导出成 SQL 文本(备份神器,后面章节详讲)。.read 文件.sql:从文件里读 SQL 来执行。.show:查看当前各项设置(模式、是否显示表头等)。
这些命令不用死记,用到时 .help 一查就有。真正高频的其实就 .tables、.schema、.mode、.headers 这四五个——把它们练到肌肉记忆,你用 CLI 的效率就能超过大半图形工具。等学到后面“备份与导出”章节,还会用到 .dump 和 .schema --indent 这类进阶玩法。
类比小结
把 sqlite3 CLI 想成“数据库文件的管理员终端”:
.open= 打开/切换档案柜(数据库文件);.tables= 看柜子里有几本账(表);.schema= 翻开任意一本账,看它的栏目是怎么设计的;.mode/.headers= 决定把查出来的内容以“表格 / 方框 / 纯文本”哪种样式摆给你看。
点命令是 CLI 给你的快捷键,SQL 才是你真正和数据库对话的语言。下一章起,我们就要正式“开口说 SQL”了——先学会建库建表,把你在这里看到的 users、orders 两套表真正建出来。
Tip练手建议:关掉 CLI 再重开,用
sqlite3 demo.db重新打开,依次敲.tables、.schema users、.headers on、.mode box、SELECT * FROM users;感受一遍。命令是敲熟的,不是看熟的。