一、启动与退出
-
启动数据库连接
1
2
3
|
sqlite3 [database_file] # 打开/创建数据库文件(如 test.db)
sqlite3 # 启动临时内存数据库 (:memory:)
sqlite3 :memory: # 显式启动内存数据库
|
- 文件不存在时自动创建
- 不指定文件名则使用临时内存数据库(关闭后消失)
-
退出 CLI
1
2
3
4
|
.exit
.quit
Ctrl + D (Linux/macOS)
Ctrl + C (Windows)
|
二、数据库与文件操作
命令 |
说明 |
示例 |
.open [FILENAME] |
打开/切换数据库 |
.open backup.db |
.backup ?DB? FILE |
在线备份数据库 |
.backup main backup_2023.db |
.restore ?DB? FILE |
从文件恢复数据库 |
.restore main backup_2023.db |
.dump ?TABLE? |
导出数据库为 SQL 脚本 |
.dump > full.sql
.dump users > users.sql |
.read FILENAME |
执行 SQL 脚本文件 |
.read import_data.sql |
.save FILE |
保存内存数据库到文件 |
.save mem_backup.db |
三、元数据查询
命令 |
说明 |
.databases |
显示所有附加数据库 |
.tables ?PATTERN? |
列出表(支持通配符) |
.schema ?TABLE? |
显示表结构(CREATE语句) |
.indexes ?TABLE? |
列出索引 |
.fullschema |
显示完整 schema(包括隐藏信息) |
四、数据操作与导入导出
-
CSV 导入导出
1
2
3
4
5
6
7
8
9
|
-- 设置 CSV 模式
.mode csv
.headers on -- 导出时包含列名
-- 导入 CSV
.import users.csv users -- 文件 → 表
-- 导出 CSV
.output users_export.csv
SELECT * FROM users;
.output stdout -- 恢复输出到终端
|
-
其他格式
1
2
3
4
5
|
.mode list -- 自定义分隔符 (默认 '|')
.mode insert -- 生成 INSERT 语句
.mode json -- JSON 格式输出
.separator "," -- 设置分隔符(如 CSV)
.nullvalue NULL -- 指定 NULL 的显示值
|
五、查询输出格式化
命令 |
效果 |
示例输出 |
.mode list |
竖线分隔 |
1|Alice|30 |
.mode csv |
CSV 格式 |
"1","Alice","30" |
.mode column |
表格对齐 |
1 Alice 30 |
.mode box |
表格+边框 |
┌──┬───────┬──┐
│1 │ Alice │30│ |
.mode json |
JSON 数组 |
[{"id":1,"name":"Alice","age":30}] |
.headers on/off |
显示/隐藏列名 |
|
.width NUM1 NUM2 |
设置列宽 |
.width 5 10 4 |
.timer on/off |
显示查询耗时 |
Run Time: real 0.002 user 0.000000 sys 0.000000 |
六、实用功能
命令 |
说明 |
.show |
显示当前所有设置 |
.stats on/off |
开关性能统计 |
.timefmt FORMAT |
设置日期格式 |
.shell CMD |
执行系统命令 |
.system CMD |
同上(别名) |
.prompt MAIN CONTINUE |
自定义提示符 |
七、高级操作
-
附加多个数据库
1
2
3
|
ATTACH DATABASE 'aux.db' AS aux;
SELECT * FROM main.users JOIN aux.orders ...;
.databases -- 查看附加数据库
|
-
执行 PRAGMA 配置
1
2
3
|
PRAGMA journal_mode=WAL; -- 启用 WAL 模式
PRAGMA synchronous=NORMAL; -- 平衡性能与安全
PRAGMA foreign_keys=ON; -- 启用外键约束
|
-
事务控制
1
2
3
4
|
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id=1;
UPDATE accounts SET balance = balance + 100 WHERE id=2;
COMMIT; -- 或 ROLLBACK
|
八、快捷示例场景
场景 1:从 CSV 创建新表并导入
1
|
sqlite3 finance.db # 创建数据库
|
1
2
3
4
5
6
7
8
9
10
11
12
|
-- 创建表
CREATE TABLE transactions (
id INTEGER PRIMARY KEY,
date TEXT,
amount REAL,
description TEXT
);
-- 导入 CSV
.mode csv
.import transactions.csv transactions
-- 验证数据
SELECT count(*) FROM transactions;
|
场景 2:备份与恢复
1
2
3
4
|
# 完整备份
sqlite3 production.db ".backup main backup_20231001.db"
# 恢复数据库
sqlite3 restored.db ".restore main backup_20231001.db"
|
九、注意事项
-
命令分类
- 点命令 (.):以 . 开头(如 .tables),不需分号结尾
- SQL 语句:标准 SQL(SELECT, CREATE 等),必须用分号 ; 结尾
-
特殊字符转义
在字符串中使用单引号时需转义:
1
|
INSERT INTO logs (message) VALUES ('It''s a test');
|
-
资源限制
查看限制:PRAGMA compile_options;
常见限制:SQLITE_MAX_LENGTH=1,000,000,000 (字符串/Blob最大长度)
掌握这些命令后,您可通过 sqlite3 CLI 高效完成日常数据库管理任务!
|