一、创建函数出现1418报错
1418 -This function has none of DETERMINISTIC,NO SQL, or READS SQL DATA in its declarationand 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 DATABEGIN-- 存储过程的实际逻辑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 语句和控制流程。
函数通常用于计算和返回单一的值,而存储过程更适用于执行一系列的操作和业务逻辑。






