我一直在创建存储过程没有问题,但是当我尝试创建一个简单的函数,它返回一个COUNT()
函数的结果时,我得到:
错误1418:此函数没有DETERMINISTIC,NO SQL或READS 声明和二进制日志记录中的SQL DATA已启用(您可能 想要使用安全性较低的log_bin_trust_function_creators变量)
由于它正在使用COUNT()
我将其更改为READS SQL DATA
,但后来收到错误:
错误1419:您没有SUPER权限和二进制日志记录 已启用(可能想要使用不太安全的用户 log_bin_trust_function_creators变量)
我不明白为什么我可以创建程序而不是函数。记录不是我真正可以访问的东西,即使我理解了该区域的问题......一点点谷歌搜索表明它与数据库复制有关,但这只是一个简单的数据库。
答案 0 :(得分:2)
在向前滚动从备份还原的数据库时,也会使用binlog。它是标准内置的。
如果您在不同的时间执行您的功能,它将返回不同的值,具体取决于它计算的行数。 binlogging的目的是让你的系统从一个已知状态到另一个已知状态。重播您的陈述会影响结果。解决方案是在不依赖binlogging时关闭binlogging,或者允许DBMS将数据更改写入binlog而不是用于更改数据的语句。
全部都在the manual。