解决SQL函数保存报错:1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its..

问题描述

mysql函数保存时,出现下面的错误

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)

在这里插入图片描述

问题分析

由于mysql数据库开启了binlog日志,又因为在binlog开启的状态下,系统默认在binlog开启的时候是关闭生成函数的使用的。这是因为系统需要信任生成函数,如果某天需要通过binlog日志回滚,而所有事务里就带有某些损害系统的函数,那么就可以提桶跑路了。

问题解决

1.查看log_bin_trust_function_creators变量值

值是off将不能执行生产函数,只有值为on的时候可以执行生产函数
在这里插入图片描述

2.临时设置MySQL的变量的值

注意:重启服务后此变量的变量值将会变为off

set global log_bin_trust_function_creators=1;

在这里插入图片描述

3.永久设置MySQL的变量的值

写入配置文件的变量和变量值不会随服务重启而失效,永久有效
在mysql配置文件中(windows为my.ini,linux为my.cnf)增加一行配置,然后要重启mysql实例!

# 1代表on,0代表off
log_bin_trust_function_creators=1
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个误是因为MySQL开启了二进制日志记录(binary logging),并且函数或存储过程的声明中没有指定DETERMINISTICNO SQLREADS SQL DATA属性。 要解决这个问题,有以下两个方法: 方法一:使用log_bin_trust_function_creators变量 由于这个误是因为MySQL开启了二进制日志记录,可以通过修改log_bin_trust_function_creators变量来解决这个问题。 1. 登录到MySQL客户端。 2. 运行以下命令: ``` SET GLOBAL log_bin_trust_function_creators = 1; ``` 这将允许创建没有DETERMINISTICNO SQLREADS SQL DATA属性的函数或存储过程,并将它们记录到二进制日志中。 3. 重新创建函数或存储过程。 方法二:指定DETERMINISTICNO SQLREADS SQL DATA属性 如果您不想修改log_bin_trust_function_creators变量,可以通过在函数或存储过程的声明中指定DETERMINISTICNO SQLREADS SQL DATA属性来解决这个问题。 1. 在创建函数或存储过程的声明中,添加以下属性之一: - DETERMINISTIC:如果函数或存储过程返回相同的结果,则指定函数或存储过程是确定性的。 - NO SQL:指定函数或存储过程不会修改数据库中的数据。 - READS SQL DATA:指定函数或存储过程只会读取数据库中的数据。 例如,以下是一个创建函数并指定DETERMINISTIC属性的示例: ``` CREATE FUNCTION my_function_name (param1 INT, param2 VARCHAR(50)) RETURNS INT DETERMINISTIC BEGIN -- function body END; ``` 2. 重新创建函数或存储过程。 这样,函数或存储过程就会被正确创建,并且可以记录到二进制日志中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐州蔡徐坤

又要到饭了兄弟们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值