Mysql8 在触发中使用dual表可以导致此错误,引起这个错误不至这一种情况,网上可以到其解决办法:
mysql -u root -p
set global log_bin_trust_function_creators = 1;
然后一切搞定,这个是什么原因呢?关于这个变量控制二进制日志记录是否应信任存储函数的创建者,以免创建将导致不安全事件的存储函数。 例如数据为中UUID相关函数。
以下是官方文档的描述。
创建存储函数时,必须声明它是确定性的或未修改数据。否则,对于数据恢复或复制可能是不安全的。
默认情况下,要接受CREATE FUNCTION语句,必须显式指定DETERMINISTIC,NO SQL或READS SQL DATA中的至少一个。否则会发生错误:
错误1418(HY000):此函数没有确定性,无SQL,或在其声明中读取SQL DATA并启用二进制日志记录。
要放松函数创建的上述条件(必须具有SUPER特权并且必须声明函数为确定性或不修改数据),请将全局log_bin_trust_function_creators系统变量设置为1。
默认情况的配置是比较安全的,一般情况下我们也是不需要改的。如果数据处理部分设计不合理的话才会遇到上面情况。