首页 > 数据库 > mysql教程 > 为什么启用二进制日志记录时 MySQL 会抛出有关确定性函数的错误?

为什么启用二进制日志记录时 MySQL 会抛出有关确定性函数的错误?

Mary-Kate Olsen
发布: 2024-10-31 15:31:02
原创
685 人浏览过

Why Does MySQL Throw an Error About Deterministic Functions When Binary Logging is Enabled?

MySQL 错误:“此函数在其声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录”

尝试将数据库导入 MySQL 时,可能会出现错误,指示函数在其声明中缺少以下声明之一:DETERMINISTIC、NO SQL 或 READS SQL DATA。激活二进制日志记录时会出现此错误。

解决错误:

可以通过两种方式解决此错误:

  1. 配置 MySQL 控制台: 在 MySQL 控制台中执行以下命令:

    SET GLOBAL log_bin_trust_function_creators = 1;
    登录后复制
  2. 编辑配置文件:添加以下行到 mysql.ini 配置文件:

    log_bin_trust_function_creators = 1;
    登录后复制

这些修改允许将非确定性函数与二进制日志记录一起使用。但是,如果禁用二进制日志记录,这些设置不会影响错误。

理解函数声明:

  • DETERMINISTIC: 表示函数对于相同的输入参数总是产生相同的结果。
  • NOT DETERMINISTIC: 表示相反,对于相同的输入参数,函数的结果可能会有所不同。
  • READS SQL DATA:显式指定函数仅从数据库读取数据。
  • NO SQL:表示函数不包含任何 SQL 语句。
  • CONTAINS SQL: 表示函数包含 SQL 指令,但不修改数据。

需要注意的是,包含非确定性指令的函数,例如 NOW() 或 UUID(),应声明为 NOT DETERMINISTIC。此外,从未复制模式读取数据的函数也是不确定的。

最佳实践:

理想的方法是理解和利用存储函数的确定性声明因为它们有助于复制优化。 MySQL 建议在存储函数的定义中显式指定上述声明之一,以避免潜在的错误。

以上是为什么启用二进制日志记录时 MySQL 会抛出有关确定性函数的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板