SQLite3 作为轻量级嵌入式数据库,无需服务端、零配置的特性使其成为开发首选。本文以「基础→进阶→高级」的逻辑,结合「文字解读 + 表格总结」的形式拆解全量核心命令,帮你不仅会用命令,更懂背后的设计逻辑。
一、基础命令:搞定日常核心操作
基础命令是 SQLite3 入门的核心,覆盖数据库连接、表结构管理、数据增删改查(CRUD),能满足 80% 的基础开发需求,是所有操作的基石。
1. 数据库基础操作
主要用于管理数据库的连接与基础信息查询,是所有操作的前提。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 打开 / 创建数据库 | 终端:sqlite3 test.db 交互式环境:.open test.db | 无对应 .db 文件则新建,有则直接打开;SQLite 设计为文件型数据库,无需服务端,因此通过文件关联实现数据库操作 |
| 查看数据库信息 | .database | 显示当前连接的数据库文件路径,避免操作错库;多数据库切换场景下必备 |
| 删除数据库 | 无专用命令 | 直接删除对应的 .db 文件即可;因 SQLite 数据库与文件一一绑定,无需额外命令,符合「极简设计」原则 |
2. 表结构管理
用于定义和查看表的结构,是数据存储的基础载体。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 创建表 | CREATE TABLE [IF NOT EXISTS] 表名(字段 类型 约束); | 支持主键、非空、默认值等约束;INTEGER PRIMARY KEY 自带自增,替代单独的自增语法,简化设计 |
| 查看表清单 | .tables | 列出当前数据库中所有表名;快速梳理数据库结构,新手排查表是否创建成功的核心命令 |
| 查看表结构 | PRAGMA table_info(表名); 简易版:.schema 表名 | PRAGMA 是 SQLite 扩展语法,专门用于查询 / 设置数据库元信息,比 .schema 更精准 |
| 删除表 | DROP TABLE [IF EXISTS] 表名; | 加 IF EXISTS 避免表不存在时报错;SQLite 对「容错性」的设计体现,降低新手操作门槛 |
3. 数据增删改查
数据库最核心的业务操作,覆盖数据的全生命周期管理。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 插入数据 | 单条:INSERT INTO 表名(字段1,字段2) VALUES(值1,值2); 批量:INSERT INTO 表名 VALUES(...),(...); | 批量插入比单条插入效率提升 10 倍以上;针对嵌入式场景 IO 性能优化的设计 |
| 查询数据 | SELECT 字段 FROM 表名 [WHERE 条件] [ORDER BY 字段] [LIMIT 条数]; | 拒绝 SELECT *,仅查询需要的字段;减少内存占用,适配嵌入式设备资源受限的特点 |
| 更新数据 | UPDATE 表名 SET 字段=值 WHERE 条件; | 必须加 WHERE,否则会全表更新;强制风险提示,避免新手误操作 |
| 删除数据 | DELETE FROM 表名 WHERE 条件; | 无 WHERE 会清空表数据;SQLite 无 TRUNCATE 命令,因轻量级场景无需区分「清空数据」和「删除表重建」 |
二、进阶命令:应对复杂业务场景
当业务涉及多表关联、数据统计、查询优化时,需掌握进阶命令,实现从「会用」到「用好」的升级,这类命令是为解决「基础命令无法覆盖的复杂场景」而生。
1. 高级查询
满足复杂的筛选、统计、关联需求,是数据分析的核心,弥补基础查询的灵活性不足。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 多条件筛选 | SELECT * FROM 表名 WHERE 条件1 AND/OR 条件2; SELECT * FROM 表名 WHERE 字段 IN (值1,值2); SELECT * FROM 表名 WHERE 字段 LIKE '张%'; | LIKE 模糊查询慎用 % 开头,会导致索引失效;平衡「查询灵活性」与「性能」的设计,适配不同场景需求 |
| 聚合统计 | SELECT COUNT(*)/SUM()/AVG() FROM 表名 [GROUP BY 字段] [HAVING 条件]; | WHERE 筛选原始数据,HAVING 筛选分组结果;拆分「数据筛选」和「结果筛选」,提升统计效率,解决多维度分析需求 |
| 多表关联 | SELECT 字段 FROM 表1 JOIN 表2 ON 表1.字段=表2.字段; | 需先执行 PRAGMA foreign_keys = ON; 开启外键约束;外键默认关闭是为了适配嵌入式场景的性能需求,开启后保障数据一致性 |
2. 事务操作
保障批量操作的数据一致性,是为解决「嵌入式场景下断电 / 异常导致的脏数据」问题设计。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 开启事务 | BEGIN TRANSACTION; | 批量插入 / 更新时开启,减少磁盘 IO 开销;SQLite 默认自动提交事务,手动开启是为了适配批量操作场景,降低 IO 次数 |
| 提交事务 | COMMIT; | 确认所有操作,数据永久写入数据库;遵循 ACID 原则,保障数据一致性,解决嵌入式设备突发断电的数据安全问题 |
| 回滚事务 | ROLLBACK; | 操作出错时,撤销所有未提交的修改;容错设计,避免单条操作失败导致全量数据异常 |
3. 索引操作
优化查询速度,解决大数据量下的查询卡顿问题,是为「轻量级数据库适配中大型数据集」设计。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 创建索引 | CREATE INDEX [IF NOT EXISTS] 索引名 ON 表名(字段); | 优先给 WHERE/JOIN/ORDER BY 高频字段建索引;索引本质是空间换时间,SQLite 简化索引语法,降低优化门槛 |
| 查看索引 | PRAGMA index_list(表名); | 检查索引是否生效,避免创建无效索引;解决「创建索引后未生效」的排查需求,提升优化效率 |
| 删除索引 | DROP INDEX [IF EXISTS] 索引名; | 数据频繁更新的表,及时删除无用索引;索引会降低写入性能,因此设计删除命令,平衡「查询」与「写入」效率 |
4. 视图操作
封装复杂查询逻辑,是为「简化复用、数据安全」设计,弥补直接查询的复用性和安全性不足。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 创建视图 | CREATE VIEW [IF NOT EXISTS] 视图名 AS 查询语句; | 示例:CREATE VIEW adult_user AS SELECT name FROM user WHERE age>=18;;视图是虚拟表,不存储数据,仅保存查询逻辑,节省存储空间,适配嵌入式场景 |
| 查询视图 | SELECT * FROM 视图名; | 用法与普通表完全一致;降低复杂查询的使用门槛,非技术人员也能快速获取统计数据 |
| 删除视图 | DROP VIEW [IF EXISTS] 视图名; | 仅删除视图定义,不影响原表数据;视图设计为「只读封装」,删除无风险,提升操作灵活性 |
三、高级命令:搞定特殊场景与性能优化
这类命令使用频率低,但每一个都对应 SQLite 特定的设计目标 ------ 要么解决「跨场景兼容」,要么优化「性能 / 体验」,是区分普通开发者和高手的关键。
1. 触发器操作
实现数据库操作的自动化,是为「无服务端场景下的自动化数据管控」设计,弥补应用层代码管控的不足。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 创建触发器 | CREATE TRIGGER [IF NOT EXISTS] 触发器名 [BEFORE/AFTER] 操作 ON 表名 FOR EACH ROW BEGIN 逻辑; END; | 示例:删除用户时自动删订单 CREATE TRIGGER del_user_order AFTER DELETE ON user FOR EACH ROW BEGIN DELETE FROM order WHERE user_id=OLD.id; END;;嵌入式场景下,无需后端服务即可实现数据联动,降低系统复杂度 |
| 查看触发器 | .schema 触发器名 | 回溯触发器逻辑,排查自动化操作异常;触发器是「隐式执行」,设计查看命令方便定位问题 |
| 删除触发器 | DROP TRIGGER [IF EXISTS] 触发器名; | 避免多触发器嵌套导致死锁;SQLite 触发器无嵌套限制,因此设计删除命令,方便清理冗余逻辑 |
2. 数据导入导出
实现与 CSV、SQL 脚本的互转,是为「跨工具兼容」设计,解决 SQLite 与 Excel、其他数据库的协同问题。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 导出 CSV | .mode csv → .output 文件名.csv → SELECT * FROM 表名; → .output stdout | 导出数据到 Excel 分析的核心方式;SQLite 本身无可视化分析能力,通过 CSV 适配主流办公软件,提升易用性 |
| 导入 CSV | .mode csv → .import 文件名.csv 表名 | 确保 CSV 字段顺序与表结构一致;解决「批量初始化数据」需求,避免手动写大量 INSERT 语句 |
| 导出表结构 | .schema > schema.sql | 备份表结构,用于跨环境迁移;嵌入式设备与 PC 端同步数据库结构的核心方式,适配多端开发场景 |
| 执行 SQL 脚本 | .read 脚本文件.sql | 批量执行初始化 / 迁移命令;解决「复杂初始化逻辑」的复用问题,提升部署效率 |
3. 控制台格式优化
提升交互式环境下的数据查看体验,是为「开发者友好性」设计,弥补默认输出格式的可读性不足。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 切换输出格式 | .mode table/column/list | .mode table 以表格形式展示结果,更直观;默认输出为纯文本,排版混乱,设计多格式适配不同查看需求 |
| 显示表头 | .headers on | 区分查询结果的字段对应关系;新手排查数据时,无需记忆字段顺序,降低认知成本 |
| 自定义列宽 | .width 宽度1 宽度2 | 解决长文本字段导致的排版混乱;适配不同终端窗口大小,提升数据可读性 |
| 显示执行时间 | .timer on | 查看 SQL 耗时,针对性优化慢查询;内置性能分析能力,无需额外工具,符合轻量级设计理念 |
4. 系统配置与运维
优化数据库性能、排查数据异常,是为「企业级场景适配」设计,弥补基础功能的性能和稳定性不足。
| 功能 | 命令语法 | 关键说明 |
|---|---|---|
| 开启 WAL 模式 | PRAGMA journal_mode = WAL; | 提升多进程并发读写性能;默认日志模式为 DELETE,仅支持单进程读写,WAL 模式是 SQLite 为高并发场景新增的优化,适配多线程应用 |
| 调整缓存大小 | PRAGMA cache_size = -size; | 示例:PRAGMA cache_size = -102400; 分配 100MB 缓存;嵌入式设备内存配置差异大,设计缓存调整命令,适配不同硬件资源 |
| 检查数据库完整性 | PRAGMA integrity_check; | 排查数据库文件损坏问题;嵌入式设备断电、存储介质损坏易导致数据库异常,内置完整性检查,降低运维成本 |
| 查看外键状态 | PRAGMA foreign_keys; | 返回 1 = 开启,0 = 关闭,确认外键约束是否生效;外键默认关闭,设计查看命令方便确认配置,避免数据一致性问题 |
| 查看自定义函数 | PRAGMA function_list; | SQLite 3.33.0+ 支持,查看扩展的自定义函数;SQLite 支持 C/Python 扩展函数,设计该命令方便管理扩展能力,适配个性化需求 |
四、核心使用原则
- 基础命令练到肌肉记忆,优先保证增删改查的准确性,这是 SQLite 设计的核心初衷 ------ 满足基础数据存储需求;
- 进阶命令按需使用,索引、视图、事务的设计目的是「适配复杂场景但不增加基础使用成本」,避免滥用导致性能下降;
- 高级命令记准场景与设计初衷,比如 WAL 模式解决并发、触发器解决自动化,无需死记语法,按需查阅即可;
- 性能优化核心:开事务 + 合理建索引 + 启用 WAL 模式,这三个命令的组合是 SQLite 针对「轻量级数据库高性能需求」的最优解。