MySQL This function has none of DETERMINISTIC, NO SQL…错误1418 解决。
为了解决这个问题,MySQL强制要求:
在主服务器上,除非子程序被声明为确定性的或者不更改数据,否则创建或者替换子程序将被拒绝。
这意味着当创建一个子程序的时候,必须要么声明它是确定性的,要么它不改变数据。
声明方式有两种,
第一种:声明是否是确定性的
第二种:声明是否会改变数据
解决方法:
解决办法也有两种,
第一种是在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个。
第二种是信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求,设置log_bin_trust_routine_creators全局系统变量为1。设置方法有三种:
1.在客户端上执行SET GLOBAL log_bin_trust_function_creators = 1;
2.MySQL启动时,加上–log-bin-trust-function-creators选贤,参数设置为1
3.在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1
我的做法:
mysql> DELIMITER //
mysql> CREATE function fn_insert_user(name varchar(32),sex char(1)) returns int
-> DETERMINISTIC
-> BEGIN
-> INSERT INTO user (username,birthday,sex,address)VALUES (name,null,sex,null);
-> RETURN LAST_INSERT_ID();
-> END //
Query OK, 0 rows affected (0.25 sec)