首页 / SQLite 入门教程 / sqlite3 命令行(CLI)入门

SQLite 入门教程

sqlite3 命令行(CLI)入门

本教程共 50 篇 · 第 5 篇 · 更新于 2026-07-31

sqlitesqlite3cli点命令

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 │
├────┼─────────┼────────┼────────────┤
1199.52026-07-31
└────┴─────────┴────────┴────────────┘

你可以看到:同样是三条信息,list 像原始管道文本,column 像对齐的报表,box 像画了框的表格。写笔记、贴文档时,boxmarkdown 模式最省心——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:列出当前连接打开了哪些库文件(至少有 maintemp)。
  • .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”了——先学会建库建表,把你在这里看到的 usersorders 两套表真正建出来。

Tip

练手建议:关掉 CLI 再重开,用 sqlite3 demo.db 重新打开,依次敲 .tables.schema users.headers on.mode boxSELECT * FROM users; 感受一遍。命令是敲熟的,不是看熟的。