• 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
  • 相关阅读:
    PostgreSQL事务特性之嵌套事务
    __attribute__((format(printf, a, b)))
    N个数依次入栈,出栈顺序有多少种?
    操作系统页面置换算法(opt,lru,fifo,clock)实现
    codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)
    基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序
    c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
    Windows下使用Dev-C++开发基于pthread.h的多线程程序
    斐波那契的四种求法
    红黑树的插入
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4391783.html
Copyright © 2020-2023  润新知