一页打完:怎么进、怎么问、怎么看、怎么走。来源是官方 CLI 文档,
不采信二手博客 —— 官方文档滞后时以 sqlite3 --help 与实际行为为准。
| 命令 | 作用 |
|---|---|
sqlite3 库文件 | 打开(不存在则创建空库) |
sqlite3 -readonly 库文件 | 只读打开,写操作直接报错 —— 看别人的库时最稳 |
sqlite3 :memory: | 开一个内存库,关掉就没了(练习用) |
.quit / .exit | 退出 |
| 命令 | 作用 |
|---|---|
.tables | 列出所有表 |
.schema [表名] | 看建表语句(表的"结构定义");不带表名则全部 |
.mode box|column|json|csv | 切换输出格式(默认 column,box 最好看) |
.headers on | 显示列名 |
.width / .nullvalue | 列宽 / 空值显示成什么 |
.indexes 表名 | 看这张表有哪些索引 |
.dump [表名] | 导出成 SQL 文本(可用来迁移/备份) |
.read 文件.sql | 执行一个 SQL 脚本文件 |
.backup 目标文件 | 在线备份(比 cp 更适合正在写入的库) |
.help | 全部点命令(记不住就看这个) |
sqlite3 -header -column 库.db "SELECT * FROM 表 LIMIT 5;" # 一次跑一条,不进交互
sqlite3 -readonly 库.db ".schema" # 只看结构
sqlite3 -cmd ".mode box" 库.db # 进库前先执行点命令
sqlite3 库.db < 脚本.sql # 批量执行
SELECT 列1, 列2 FROM 表 WHERE 条件 ORDER BY 列 DESC LIMIT 10;
SELECT count(*), 分组列 FROM 表 GROUP BY 分组列; -- 聚合
SELECT a.列, b.列 FROM a JOIN b ON a.id = b.a_id; -- 连接
INSERT INTO 表 (列1, 列2) VALUES ('值1', 2);
UPDATE 表 SET 列1 = '新值' WHERE 条件;
DELETE FROM 表 WHERE 条件;
CREATE TABLE 表 (id INTEGER PRIMARY KEY, 名称 TEXT NOT NULL, 创建时间 INTEGER);
CREATE INDEX 索引名 ON 表 (列); -- 上索引
BEGIN; ... COMMIT; -- 或 ... ROLLBACK; -- 事务
EXPLAIN QUERY PLAN SELECT ...; -- 看有没有走索引
cp 就是备份(库正在写时改用 .backup)。INTEGER 列里塞文本(除非加 STRICT 表),这叫动态类型 —— 好处是灵活,代价是容易自己坑自己。
数据本身永远是 UTF-8。乱码发生在控制台:代码页不是 UTF-8 时,你写进命令行的中文(比如列别名 AS 内容)会先被转坏。
chcp 65001 # 切 UTF-8 代码页(Git Bash: chcp.com 65001)
sqlite3 -header -column 库.db "SELECT project_path FROM memories LIMIT 3;"
课程:0001 打开你机器上的一个真库 · 资源清单:RESOURCES.md · 使命:MISSION.md