3

我一直在创建没有问题的存储过程,但是当尝试创建一个返回COUNT()表上函数结果的简单函数时,我得到:

错误 1418:此函数在其声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录(您可能 希望使用不太安全的 log_bin_trust_function_creators 变量)

由于它正在使用COUNT()我将其更改为READS SQL DATA但随后出现错误:

错误 1419:您没有超级权限并且启用了二进制日志记录(您可能希望使用不太安全的 log_bin_trust_function_creators 变量)

我不明白为什么我可以创建程序但不能创建函数。日志记录不是我真正可以访问的东西,即使我了解那个区域的问题是什么......有点谷歌搜索表明它与数据库复制或其他东西有关,但这只是一个简单的数据库。

4

1 回答 1

2

当前滚从备份恢复的数据库时,也会使用 binlog。它作为标准内置。

如果你在不同的时间执行你的函数,它将根据它计算的行数返回不同的值。binlogging 的目的是让您的系统从一个已知状态变为另一个已知状态。当你的陈述被重播时会影响结果。解决方案是如果您不依赖它,则关闭 binlogging,或者允许 DBMS 将数据更改写入 binlog,而不是用于更改数据的语句。

这一切都在手册中。

于 2012-11-30T00:05:19.123 回答