zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    不要在构造中做太多事情,不然有时候会出现有意思的代码~
    对称加密和非对称加密
    关于WebAPI安全认证的问题
    Dojo和jQuery区别
    跨域访问解决方案:JSONP
    MyEclipse中提示SpringMVC的XML配置文件出错解决方法
    什么是跨域请求
    Hadoop的初步理解
    数据库读写分离的初步理解
    前端渲染和后端渲染
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4391783.html
Copyright © 2011-2022 走看看