首页 > 数据库 > mysql教程 > 为什么我在 MySQL 中收到'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?

为什么我在 MySQL 中收到'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?

Barbara Streisand
发布: 2024-10-31 16:16:02
原创
854 人浏览过

Why Do I Get the

理解错误:“DETERMINISTIC、NO SQL 或 READS SQL DATA”声明要求

将数据库导入 MySQL 时,可能会出现以下情况:遇到以下错误:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
登录后复制

此错误表示定义的函数或存储过程在其定义中缺少以下声明之一:

  • DETERMINISTIC
  • NO SQL
  • 读取 SQL 数据

当 MySQL 中启用二进制日志记录时,需要这些声明来确保数据完整性和复制一致性。

错误修复

要解决此问题,您可以使用以下两种方法之一:

  1. 启用 log_bin_trust_function_creators 变量:

    • 在 MySQL 控制台中,执行以下命令:

      SET GLOBAL log_bin_trust_function_creators = 1;
      登录后复制
    • 或者,将以下内容添加到 MySQL 配置文件(例如 mysql .ini):

      log_bin_trust_function_creators = 1;
      登录后复制

    启用此设置允许在二进制日志记录期间执行没有显式声明的函数。

  2. 添加对函数或过程的适当声明:

    • 对于始终为相同输入参数产生相同输出的函数,请使用 DETERMINISTIC 声明。例如:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
      登录后复制
    • 对于不包含任何 SQL 语句的函数,请使用 NO SQL 声明。

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
      登录后复制
    • 对于仅从数据库读取数据的函数,请使用 READS SQL DATA 声明。

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END
      登录后复制

理解确定性函数声明

非确定性函数可以修改数据或使用不可预测的输入,从而导致相同输入参数产生不同的结果。因此,准确声明函数行为以优化性能并确保数据完整性非常重要。

MySQL 文档提供了各种函数和存储过程函数声明选项的全面指南,使您能够为每个函数做出明智的决策功能。错误声明可能会影响执行计划并影响性能。

以上是为什么我在 MySQL 中收到'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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