SQLite 的 PRAGMA 命令是一组特有的控制语句,用于获取或修改数据库连接的行为方式,包括外键支持、同步级别、缓存大小、加密设置、自动压缩等。这些命令在调优、调试、安全、事务控制等高级应用中至关重要。

📌 本文由 www.52kanjuqing.com 专业整理,仅此一次引用。


📚 目录

  1. 什么是 PRAGMA?用途与语法格式
  2. 常用 PRAGMA 命令分类与详解
    • 数据库结构类
    • 性能优化类
    • 安全与完整性类
    • 调试与分析类
  3. 动态设置与程序化控制方式
  4. 使用建议与注意事项
  5. 出站参考链接与站内推荐阅读
  6. 参考资料

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. 📚 参考资料

  1. Richard Hipp. SQLite PRAGMA Statements. https://www.sqlite.org/pragma.html
  2. D. K. Sahoo. The Definitive Guide to SQLite. Apress
  3. SQLite Tutorial Site: https://www.sqlitetutorial.net/sqlite-pragma/
  4. Stack Overflow: sqlite pragma tag

下一条我将撰写 “SQLite 约束”。是否按这个格式继续输出?你也可以指定是否要合并为长篇教程页面或每条独立文章输出。