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
  • 相关阅读:
    SSH框架
    buildroot使用详解
    java下的字符流
    Tomcat的相关配置
    web.xml常用元素配置
    四、Emmet:快速编写HTML,CSS代码的有力工具
    Amazium源码分析:(1)基本介绍
    三、Brackets:一个好用的Web前端开发编辑器
    二、CSS 基本介绍
    一、HTML4背景知识
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4391783.html
Copyright © 2011-2022 走看看