错误码: 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and

创建存储函数的时候,会遇到这样的错误:

SQL:

DELIMITER ;;
CREATE FUNCTION `GetGuid`() RETURNS VARCHAR(40) CHARSET utf8 COMMENT '获取不带"-"的GUID'
BEGIN
DECLARE id VARCHAR(40);
SET id=(SELECT REPLACE(UUID(),'-',''));
RETURN id;
END;;
DELIMITER ;

错误码: 1418
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从安全角度考虑(比如存储函数里存在一些不特定的函数,会导致主从的数据可能不一致),存储过程和函数需要遵守一些限制。参数如下:

log_bin_trust_function_creators 

1.默认OFF,在这样的情况下,创建者首先必须有SUPER权限,才能创建存储函数。 并且,创建的存储函数必须是确定的,不可以修改数据,在创建函数的时候必须指   定DETERMINISTIC, NO SQL, or READS SQL DATA ,这就是上面报错的原因。

(a).DETERMINISTIC 不确定
(b).NO SQL 没有SQL,自然也不会修改数据
(c).READS SQL DATA 只是读取数据
(d).MODIFIES SQL DATA  修改数据(需要开启log_bin_trust_function_creators ,当然开启后可以省略不写)

DELIMITER ;;
CREATE FUNCTION test1() RETURNS VARCHAR(40) CHARSET utf8 COMMENT '获取不带"-"的GUID'   READS SQL DATA  
BEGIN
DECLARE id VARCHAR(40);
SET id=(SELECT '123456');
RETURN id;
END;;
DELIMITER ;


2.如果开启(设置为ON或者1),则不会有任何限制,当然也会有风险,就是创建者不会创建不安全不确定的存储函数。

触发器同理。

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值