暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

处理MySQL函数创建出错及无法正常执行问题【测试成功】

巴韭特锁螺丝 2024-09-09
111

一、创建函数出现1418报错

    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 错误(Error 1418)通常出现在使用二进制日志(binary logging)的情况下,它是因为 MySQL 对于在二进制日志中记录的存储过程(stored procedure)有一些限制。具体来说,如果存储过程被标记为 NOT DETERMINISTIC
    NO SQL
    READS SQL DATA
    ,而且二进制日志启用,那么 MySQL 将会拒绝创建这个存储过程。

        解决方案1:创建存储过程时使用 CREATE PROCEDURE
    语句

      CREATE PROCEDURE your_procedure()
      READS SQL DATA
      BEGIN
      -- 存储过程的实际逻辑
      END;

          解决方案2:调整配置文件

        [mysqld]
        log_bin_trust_function_creators = 1

            这个配置将会放宽对于存储过程的创建限制,但需要注意,这也可能会引入一些安全风险,因此在生产环境中请慎重使用。

        二、执行函数报错:The user specified as a definer ('fim'@'%') does not exist

            解决:创建用户或者修改函数的使用用户

          CREATE USER 'fim'@'%' IDENTIFIED BY '12356';
          GRANT ALL PRIVILEGES ON *.* TO 'fim'@'%';
          FLUSH PRIVILEGES;

          三、Mysql函数与存储过程区别和联系

              存储过程和函数都是事先编译并存储在数据库中的SQL语句的集合,它们具有提高代码复用性、减少数据传输以及降低业务处理复杂度等优点。但是,二者之间存在一些主要的区别。首先,存储过程可以执行一系列的SQL语句,而函数通常是由一个或多个SQL语句组成的子程序。其次,一般来说,存储过程实现的功能比较复杂,而函数的功能针对性更强。此外,所有的存储函数都必须有返回值,但存储过程则不一定需要。

              事务支持:

          • 函数:不可以修改数据库的数据,也不可以包含对数据库表的 INSERT、UPDATE 或 DELETE 操作。主要用于数据处理和计算。

          • 存储过程:可以包含对数据库表的修改操作,因此可以用于实现更复杂的业务逻辑。存储过程可以包含多个 SQL 语句和控制流程。

              函数通常用于计算和返回单一的值,而存储过程更适用于执行一系列的操作和业务逻辑。

          文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论