• Mysql ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA


    ERROR 1418 (HY000): 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配置了复制,复制功能也就意味着Master数据的变化,会同步到Slave。对于函数,Mysql要求函数不能修改数据。
    解决办法:
    1、创建函数的时候,明确说明我不会修改数据。创建函数的时候有5个选项:
    a、DETERMINISTIC 确定性的
    b、NO SQL 没有包含SQl语句,当然也不会修改数据
    c、READS SQL DATA 只是读取数据,当然也不会修改数据
    d、MODIFIES SQL DATA 要修改数据
    e、CONTAINS SQL 包含了SQL语句
    怎么理解DETERMINISTIC确定性的?
    可以认为输入相同,方法执行过程,输出也是相同的。也就是方法的可重入性。不可重入的方法:方法内使用了静态的数据,使用了malloc和free,使用了标准I/O函数。
    创建函数必须明确指出a、b、c三个选项中的一个,才能执行成功。如下:
    mysql> show variables like 'log_bin%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin                         | ON    |
    | log_bin_trust_function_creators | OFF   |
    | log_bin_trust_routine_creators  | OFF   |
    +---------------------------------+-------+
    3 rows in set
    mysql> create function fun1 (num int(9)) returns int(9)
    begin
    return 1;
    end;
    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> create function fun1 (num int(9)) returns int(9) reads sql data
    begin
    return 1;
    end;
    Query OK, 0 rows affected
    mysql> drop function fun1;
    Query OK, 0 rows affected
    mysql> create function fun1 (num int(9)) returns int(9) deterministic
    begin
    return 1;
    end;
    Query OK, 0 rows affected
    2、告诉Mysql,信任我,方法不会修改数据,Mysql不再检查,即使修改了数据。这个时候要靠你信守承诺,否则后果自负。
    mysql> drop function fun1;
    Query OK, 0 rows affected
    mysql> set global log_bin_trust_function_creators=on;
    Query OK, 0 rows affected
    mysql> show variables like 'log_bin%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin                         | ON    |
    | log_bin_trust_function_creators | ON    |
    | log_bin_trust_routine_creators  | ON    |
    +---------------------------------+-------+
    3 rows in set
    mysql> create function fun1 (num int(9)) returns int(9) modifies sql data
    begin
    return 1;
    end;
    Query OK, 0 rows affected
  • 相关阅读:
    js_未结束的字符串常量
    [转]关于项目管理的思考
    Nhibernate理解
    Visual Studio 2005常用插件搜罗
    基本概念
    resharper 2.0
    Nhibernate资源
    [转]关于项目管理的知识点
    style
    带分数 蓝桥杯
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4391783.html
Copyright © 2020-2023  润新知