文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  重写器查询重写插件参考

7.6.4.3 重写器查询重写插件参考

以下讨论是对与 重写器 查询重写插件关联的这些元素的参考

  • query_rewrite 数据库中的 重写器 规则表

  • 重写器 过程和函数

  • 重写器 系统和状态变量

7.6.4.3.1 重写器查询重写插件规则表

query_rewrite 数据库中的 rewrite_rules 表为 重写器 插件用于决定是否重写语句的规则提供持久存储。

用户通过修改存储在此表中的规则集与插件进行通信。插件通过设置表的 message 列将信息传达给用户。

注意

规则表由 flush_rewrite_rules 存储过程加载到插件中。除非在最近一次表修改后调用了该过程,否则表内容不一定与插件正在使用的规则集相对应。

rewrite_rules 表具有以下列

  • id

    规则 ID。此列是表主键。您可以使用 ID 来唯一标识任何规则。

  • pattern

    指示规则匹配的语句模式的模板。使用 ? 表示匹配数据值的占位符。

  • pattern_database

    用于匹配语句中非限定表名的数据库。如果相应的数据库和表名相同,则语句中的限定表名与模式中的限定名称匹配。仅当默认数据库与 pattern_database 相同且表名相同时,语句中的非限定表名才与模式中的非限定名称匹配。

  • replacement

    指示如何重写与 pattern 列值匹配的语句的模板。使用 ? 表示匹配数据值的占位符。在重写的语句中,插件使用与 pattern 中的相应标记匹配的数据值替换 replacement 中的 ? 占位符。

  • enabled

    规则是否启用。加载操作(通过调用 flush_rewrite_rules() 存储过程执行)仅在此列为 YES 时才将规则从表加载到 重写器 内存缓存中。

    此列允许在不删除规则的情况下停用规则:将该列设置为除 YES 以外的值,然后将表重新加载到插件中。

  • message

    插件使用此列与用户进行通信。如果将规则表加载到内存中时没有发生错误,则插件会将 message 列设置为 NULL。非 NULL 值表示出现错误,并且列内容是错误消息。在以下情况下可能会发生错误

    • 模式或替换是错误的 SQL 语句,会产生语法错误。

    • 替换包含的 ? 占位符比模式多。

    如果发生加载错误,插件还会将 Rewriter_reload_error 状态变量设置为 ON

  • pattern_digest

    此列用于调试和诊断。如果将规则表加载到内存中时该列存在,则插件会使用模式摘要对其进行更新。如果您试图确定某些语句为何无法重写,此列可能会很有用。

  • normalized_pattern

    此列用于调试和诊断。如果将规则表加载到内存中时该列存在,则插件会使用模式的规范化形式对其进行更新。如果您试图确定某些语句为何无法重写,此列可能会很有用。

7.6.4.3.2 重写器查询重写插件过程和函数

重写器 插件操作使用将规则表加载到其内存缓存中的存储过程,以及一个辅助可加载函数。在正常操作下,用户只调用存储过程。该函数旨在由存储过程调用,而不是由用户直接调用。

7.6.4.3.3 Rewriter 查询重写插件系统变量

Rewriter 查询重写插件支持以下系统变量。这些变量仅在安装插件后才可用(请参阅 第 7.6.4.1 节 “安装或卸载 Rewriter 查询重写插件”)。

7.6.4.3.4 Rewriter 查询重写插件状态变量

Rewriter 查询重写插件支持以下状态变量。这些变量仅在安装插件后才可用(请参阅 第 7.6.4.1 节 “安装或卸载 Rewriter 查询重写插件”)。

  • Rewriter_number_loaded_rules

    rewrite_rules 表成功加载到内存中供 Rewriter 插件使用的重写插件重写规则的数量。

  • Rewriter_number_reloads

    rewrite_rules 表已加载到 Rewriter 插件使用的内存缓存中的次数。

  • Rewriter_number_rewritten_queries

    自加载 Rewriter 查询重写插件以来,它重写的查询数量。

  • Rewriter_reload_error

    最近一次将 rewrite_rules 表加载到 Rewriter 插件使用的内存缓存中时是否发生错误。如果值为 OFF,则表示没有发生错误。如果值为 ON,则表示发生了错误;请检查 rewrite_rules 表的 message 列以获取错误消息。