SQLite 的 PRAGMA
命令是一组特有的控制语句,用于获取或修改数据库连接的行为方式,包括外键支持、同步级别、缓存大小、加密设置、自动压缩等。这些命令在调优、调试、安全、事务控制等高级应用中至关重要。
📌 本文由 www.52kanjuqing.com 专业整理,仅此一次引用。
📚 目录
- 什么是 PRAGMA?用途与语法格式
- 常用 PRAGMA 命令分类与详解
- 数据库结构类
- 性能优化类
- 安全与完整性类
- 调试与分析类
- 动态设置与程序化控制方式
- 使用建议与注意事项
- 出站参考链接与站内推荐阅读
- 参考资料
1. 什么是 PRAGMA?
PRAGMA 是 SQLite 的扩展 SQL 语法,用于:
- 查询或设置运行参数(如同步模式、缓存大小)
- 启用/关闭功能(如外键约束、自动索引)
- 输出元信息(如表结构、索引详情)
语法格式:
PRAGMA pragma_name;
PRAGMA pragma_name = value;
PRAGMA 命令在 SQLite CLI 中可直接执行,也可在应用程序内执行,结果返回类似表查询。
2. 常用 PRAGMA 命令分类与详解
📦 结构类 PRAGMA
命令 | 作用 |
---|---|
table_info(table_name) | 显示表结构(字段名、类型) |
index_list(table_name) | 显示指定表上的所有索引 |
foreign_key_list(table) | 显示外键关联 |
database_list | 当前连接的数据库文件列表 |
PRAGMA table_info(users);
⚙️ 性能优化类
命令 | 作用 |
---|---|
cache_size | 设置缓存页数(负数=KB) |
synchronous | 控制写入同步策略(0~3) |
journal_mode | 设置日志模式(DELETE、WAL 等) |
locking_mode | 控制锁策略(NORMAL、EXCLUSIVE) |
PRAGMA synchronous = OFF;
PRAGMA journal_mode = WAL;
🔒 安全与完整性类
命令 | 作用 |
---|---|
foreign_keys | 是否启用外键(默认关闭) |
integrity_check | 检查数据库完整性 |
auto_vacuum | 启用自动回收空间 |
secure_delete | 删除数据时是否进行数据擦除 |
PRAGMA foreign_keys = ON;
PRAGMA integrity_check;
🧠 调试与分析类
命令 | 作用 |
---|---|
compile_options | 显示编译参数 |
default_cache_size | 返回默认缓存页大小 |
temp_store | 设置临时表的存储方式(内存/磁盘) |
busy_timeout | 设置锁等待超时(毫秒) |
PRAGMA compile_options;
3. 动态设置与程序化控制
在应用开发中,PRAGMA
可通过 SQLite 接口动态传入,例如:
Python 示例:
conn.execute("PRAGMA foreign_keys = ON;")
C/C++ 示例:
sqlite3_exec(db, "PRAGMA journal_mode=WAL;", 0, 0, 0);
这些设置仅影响当前连接,不会全局生效或永久保存。
4. 使用建议与注意事项
- ✅
PRAGMA
通常只对当前连接有效,请在每次连接初始化时设置 - ⚠️ 某些设置(如 WAL)需要 SQLite 版本支持(3.7+)
- 🔐 设置外键约束后,要保证数据插入顺序和引用表一致
- ⚡ 部分 PRAGMA(如
synchronous = OFF
)虽提高性能,但可能影响事务安全
5. 🔗 出站参考链接与站内推荐
官方文档链接:
站内推荐阅读(www.52kanjuqing.com):
6. 📚 参考资料
- Richard Hipp. SQLite PRAGMA Statements. https://www.sqlite.org/pragma.html
- D. K. Sahoo. The Definitive Guide to SQLite. Apress
- SQLite Tutorial Site: https://www.sqlitetutorial.net/sqlite-pragma/
- Stack Overflow: sqlite pragma tag
下一条我将撰写 “SQLite 约束”。是否按这个格式继续输出?你也可以指定是否要合并为长篇教程页面或每条独立文章输出。
发表回复