没有超级权限,无法创建简单的MySQL函数

3
我一直在创建存储过程并没有出现问题,但尝试创建一个简单的函数以返回表中COUNT()函数的结果时,我遇到了以下错误:
ERROR 1418: 在声明中此函数未包含DETERMINISTIC、NO SQL或READS SQL DATA之一,并且启用了二进制日志记录(可能需要使用更不安全的log_bin_trust_function_creators变量)
由于它使用了COUNT()函数,所以我将其改为READS SQL DATA,但随后出现了以下错误:
ERROR 1419: 没有SUPER权限且启用了二进制日志记录 (可能需要使用更不安全的log_bin_trust_function_creators变量)
我不明白为什么我能够创建存储过程却无法创建函数。我真的无法访问日志记录,即使我了解了该领域的问题……一些谷歌搜索表明这与数据库复制有关,但这只是一个简单的数据库。
1个回答

2

当从备份中恢复数据库时,binlog也用于向前滚动。它是标准内置的。

如果您在不同的时间执行函数,则根据计数的行数返回不同的值。而binlogging的目的是将系统从一个已知状态转移到另一个已知状态。当重新播放语句时,将影响结果。解决方案是关闭binlogging(如果您不依赖它),或允许DBMS将数据更改写入binlog而不是用于更改数据的语句。

所有内容都在手册中。


1
那么为什么过程没有得到同等对待,'OUT'参数肯定也会遇到同样的问题吧? - Mr. Boy
1
由于您无法在INSERT/UPDATE/REPLACE语句中调用过程。 - symcbean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接