SQLite - PRAGMA(编译指示)

  • 简述

    SQLite PRAGMA命令是一个特殊的命令,用于控制 SQLite 环境中的各种环境变量和状态标志。可以读取 PRAGMA 值,也可以根据需要进行设置。

    句法

    要查询当前的 PRAGMA 值,只需提供 pragma 的名称。
    
    PRAGMA  pragma_name;
    
    要为 PRAGMA 设置新值,请使用以下语法。
    
    PRAGMA  pragma_name = value;
    
    设置模式可以是名称或等效的整数,但返回值将始终是整数。
  • auto_vacuum pragma

    auto_vacuum pragma 获取或设置自动真空模式。以下是简单的语法。
    
    PRAGMA [database.]auto_vacuum;
    PRAGMA [database.]auto_vacuum = mode;
    
    在哪里 mode 可以是以下任何一种 -
    序号 Pragma 值和描述
    1
    0 或 NONE
    Auto-vacuum 已禁用。这是默认模式,这意味着数据库文件永远不会缩小,除非使用 VACUUM 命令手动清理它。
    2
    1 或 FULL
    Auto-vacuum 已启用且全自动,这允许在从数据库中删除数据时缩小数据库文件。
    3
    2 或 INCREMENTAL
    已启用Auto-vacuum,但必须手动激活。在这种模式下,将维护引用数据,但将空闲页面简单地放在空闲列表中。这些页面可以在任何时候使用incremental_vacuum pragma恢复。
  • cache_size pragma

    cache_size pragma 可以获取或临时设置内存页面缓存的最大大小。以下是简单的语法。
    
    PRAGMA [database.]cache_size;
    PRAGMA [database.]cache_size = pages;
    
    pagesvalue 表示缓存中的页数。内置页面缓存的默认大小为 2,000 页,最小大小为 10 页。
  • case_sensitive_like pragma

    case_sensitive_like pragma 控制内置 LIKE pragma为 false,这意味着内置 LIKE 运算符会忽略字母大小写。以下是简单的语法。
    
    PRAGMA case_sensitive_like = [true|false];
    
    无法查询此 pragma 的当前状态。
  • count_changes pragma

    count_changes pragma 获取或设置数据操作语句如 INSERT、UPDATE 和 DELETE 的返回值。以下是简单的语法。
    
    PRAGMA count_changes;
    PRAGMA count_changes = [true|false];
    
    默认情况下,此 pragma 为 false,并且这些语句不返回任何内容。如果设置为 true,则上述每个语句都将返回一个单列单行表,该表由单个整数值组成,指示受操作影响的行。
  • database_list pragma

    database_list pragma 将用于列出所有附加的数据库。以下是简单的语法。
    
    PRAGMA database_list;
    
    pragma将返回一个三列表,每个打开或附加的数据库一行,给出数据库序列号、其名称和相关文件。
  • 编码 pragma

    encoding pragma 控制字符串如何编码和存储在数据库文件中。以下是简单的语法。
    
    PRAGMA encoding;
    PRAGMA encoding = format;
    
    格式值可以是以下之一 UTF-8, UTF-16le, 或者 UTF-16be.
  • freelist_count pragma

    freelist_count pragma 返回一个整数,指示当前标记为空闲和可用的数据库页数。以下是简单的语法。
    
    PRAGMA [database.]freelist_count;
    
    格式值可以是以下之一 UTF-8, UTF-16le, 或者 UTF-16be.
  • index_info pragma

    index_info pragma 返回有关数据库索引的信息。以下是简单的语法。
    
    PRAGMA [database.]index_info( index_name );
    
    结果集将为索引中包含的每一列包含一行,给出列序列、表中的列索引和列名。
  • index_list pragma

    index_list pragma 列出了与表关联的所有索引。以下是简单的语法。
    
    PRAGMA [database.]index_list( table_name );
    
    结果集将为每个索引包含一行,给出索引序列、索引名称和指示索引是否唯一的标志。
  • journal_mode pragma

    journal_mode pragma 获取或设置日志模式,该模式控制日志文件的存储和处理方式。以下是简单的语法。
    
    PRAGMA journal_mode;
    PRAGMA journal_mode = mode;
    PRAGMA database.journal_mode;
    PRAGMA database.journal_mode = mode;
    
    下表列出了五种受支持的日志模式。
    序号 Pragma 值和描述
    1
    DELETE
    这是默认模式。在交易结束时,日志文件被删除。
    2
    TRUNCATE
    日志文件被截断为零字节的长度。
    3
    PERSIST
    日志文件保留在原处,但标题被覆盖以指示日志不再有效。
    4
    MEMORY
    日志记录保存在内存中,而不是磁盘上。
    5
    OFF
    不保留日志记录。
  • max_page_count pragma

    max_page_count pragma 获取或设置数据库的最大允许页数。以下是简单的语法。
    
    PRAGMA [database.]max_page_count;
    PRAGMA [database.]max_page_count = max_page;
    
    默认值是 1,073,741,823,即 1 giga-page,这意味着如果默认 1 KB 页面大小,这允许数据库增长到 1 TB。
  • page_count pragma

    page_count pragma 返回数据库中当前页数。以下是简单的语法 -
    
    PRAGMA [database.]page_count;
    
    数据库文件的大小应该是 page_count * page_size。
  • page_size pragma

    page_size pragma 获取或设置数据库页面的大小。以下是简单的语法。
    
    PRAGMA [database.]page_size;
    PRAGMA [database.]page_size = bytes;
    
    默认情况下,允许的大小为 512、1024、2048、4096、8192、16384 和 32768 字节。更改现有数据库页面大小的唯一方法是设置页面大小,然后立即 VACUUM 数据库。
  • parser_trace pragma

    parser_trace pragma 在解析 SQL 命令时控制打印调试状态。以下是简单的语法。
    
    PRAGMA parser_trace = [true|false];
    
    默认情况下,它设置为 false,但通过将其设置为 true 来启用时,SQL 解析器将在解析 SQL 命令时打印其状态。
  • recursive_triggers pragma

    recursive_triggers pragma 获取或设置递归触发器功能。如果未启用递归触发器,则触发器操作将不会触发另一个触发器。以下是简单的语法。
    
    PRAGMA recursive_triggers;
    PRAGMA recursive_triggers = [true|false];
    
  • schema_version pragma

    schema_version pragma 获取或设置存储在数据库头中的模式版本值。以下是简单的语法。
    
    PRAGMA [database.]schema_version;
    PRAGMA [database.]schema_version = number;
    
    这是一个 32 位有符号整数值,用于跟踪架构更改。每当执行模式更改命令(如 CREATE... 或 DROP...)时,该值就会增加。
  • secure_delete pragma

    secure_delete pragma 用于控制如何从数据库中删除内容。以下是简单的语法。
    
    PRAGMA secure_delete;
    PRAGMA secure_delete = [true|false];
    PRAGMA database.secure_delete;
    PRAGMA database.secure_delete = [true|false];
    
    安全删除标志的默认值通常是关闭的,但这可以通过 SQLITE_SECURE_DELETE 构建选项进行更改。
  • sql_trace pragma

    sql_trace pragma 用于将 SQL 跟踪结果转储到屏幕。以下是简单的语法。
    
    PRAGMA sql_trace;
    PRAGMA sql_trace = [true|false];
    
    SQLite 必须使用 SQLITE_DEBUG pragma。
  • pragma

    synchronous pragma 获取或设置当前磁盘同步模式,该模式控制 SQLite 将数据一直写入物理存储的积极程度。以下是简单的语法。
    
    PRAGMA [database.]synchronous;
    PRAGMA [database.]synchronous = mode;
    
    SQLite 支持表中列出的以下同步模式。
    序号 Pragma 值和描述
    1
    0 or OFF
    根本没有同步
    2
    1 or NORMAL
    在每个关键磁盘操作序列之后同步
    3
    2 or FULL
    每次关键磁盘操作后同步
  • temp_store pragma

    temp_store pragma 获取或设置临时数据库文件使用的存储模式。以下是简单的语法。
    
    PRAGMA temp_store;
    PRAGMA temp_store = mode;
    
    SQLite 支持以下存储模式。
    序号 Pragma 值和描述
    1
    0 or DEFAULT
    使用编译时默认值。通常是文件。
    2
    1 or FILE
    使用基于文件的存储。
    3
    2 or MEMORY
    使用基于内存的存储。
  • temp_store_directory pragma

    temp_store_directory pragma 获取或设置用于临时数据库文件的位置。以下是简单的语法。
    
    PRAGMA temp_store_directory;
    PRAGMA temp_store_directory = 'directory_path';
    
  • user_version pragma

    user_version pragma 获取或设置存储在数据库标题中的用户定义的版本值。以下是简单的语法。
    
    PRAGMA [database.]user_version;
    PRAGMA [database.]user_version = number;
    
    这是一个 32 位有符号整数值,可由开发人员设置以进行版本跟踪。
  • writable_schema Pragma

    writable_schema pragma 获取或设置修改系统表的能力。以下是简单的语法。
    
    PRAGMA writable_schema;
    PRAGMA writable_schema = [true|false];
    
    如果设置了此 pragma,则可以创建和修改以 sqlite_ 开头的表,包括 sqlite_master 表。使用 pragma 时要小心,因为它可能导致数据库完全损坏。