mysql 存储函数错误1418 - This function has none of DETERIMINISTIC, NO SQL...的两种解决办法

错误如图:

1418 - This function has none of DETERIMINISTIC, NO SQL, or READS SOL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log bin trust function creators variable)

解决办法一:

在声明返回值类型后加入如下代码:

                    DETERMINISTIC
                    CONTAINS SQL
                    READS SQL DATA

CREATE DEFINER = CURRENT_USER FUNCTION `wlA2`()
	RETURNS DOUBLE
    		DETERMINISTIC
			CONTAINS SQL
			READS SQL DATA
BEGIN
    DECLARE fs DOUBLE;

	SELECT zdf INTO fs
	FROM `sn`;
	
	RETURN fs;
END;

解决办法二:先执行一下代码再进行保存存储函数

SET GLOBAL log_bin_trust_function_creators = 1;

这个错误是因为MySQL开启了二进制日志记录(binary logging),并且函数存储过程的声明中没有指定DETERMINISTIC、NO SQL或READS SQL DATA属性。 要解决这个问题,有以下两个方法: 方法一:使用log_bin_trust_function_creators变量 由于这个错误是因为MySQL开启了二进制日志记录,可以通过修改log_bin_trust_function_creators变量来解决这个问题。 1. 登录到MySQL客户端。 2. 运行以下命令: ``` SET GLOBAL log_bin_trust_function_creators = 1; ``` 这将允许创建没有DETERMINISTIC、NO SQL或READS SQL DATA属性的函数存储过程,并将它们记录到二进制日志中。 3. 重新创建函数存储过程。 方法二:指定DETERMINISTIC、NO SQL或READS SQL DATA属性 如果您不想修改log_bin_trust_function_creators变量,可以通过在函数存储过程的声明中指定DETERMINISTIC、NO SQL或READS 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、付费专栏及课程。

余额充值