mysql 1418 无法创建函数的解决方法

本文详细介绍了如何解决MySQL中遇到的1418错误,该错误通常发生在尝试创建函数时,且二进制日志已启用。通过设置全局变量log_bin_trust_function_creators为1,可以避免此问题。同时提供了在不同环境(如命令行、配置文件等)中应用此设置的方法。
ErrorCode:1418
ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wanttousethelesssafelog_bin_trust_function_creatorsvariable)
(0mstaken)

  解决方法如下:

  1. mysql> SET GLOBAL log_bin_trust_function_creators = 1;

  2. 系统启动时 --log-bin-trust-function-creators=1

  3. 在my.ini(linux下为my.conf)文件中 [mysqld] 标记后加一行内容为 log-bin-trust-function-creators

如果在create function的时候有 1418的错语的时候:那么只需要执行set global log_bin_trust_routine_creators=1;

然后怎么create function 都不会有问题(当然,你的function必段正确哦),这是mysql的一个bug,搞不懂为什么,反正这样做就OK了.

另外,也可以直接在配置文件my.cnf中添加如下行[mysqld] log_bin_trust_routine_creators=1;

这个命令可以在sql editor的环境中运行,并不需要重新启动服务哦。
### 如何在 MySQL创建存储函数 #### 创建存储函数的语法 要在 MySQL 数据库中创建存储函数,需使用 `CREATE FUNCTION` 语句。此语句允许定义返回单个值的自定义逻辑。基本语法如下: ```sql DELIMITER $$ CREATE FUNCTION function_name (parameter_list) RETURNS datatype DETERMINISTIC | NONDETERMINISTIC LANGUAGE SQL NOT CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA BEGIN -- 函数体 END$$ DELIMITER ; ``` - `function_name`: 定义要创建函数名称。 - `parameter_list`: 参数列表及其数据类型。 - `RETURNS datatype`: 指定该函数将返回的数据类型的声明。 为了更好地理解上述概念,下面提供了一个具体的例子[^1]。 #### 示例:创建并调用 Square 函数 假设希望构建一个名为 `Square` 的简单函数用于计算给定数值的平方,则可以按照以下方式编写代码: ```sql DELIMITER $$ CREATE FUNCTION Square(n INT) RETURNS INT DETERMINISTIC BEGIN RETURN n * n; END$$ DELIMITER ; ``` 这段脚本完成了几个重要操作: - 更改默认分隔符为双美元符号(`$$`)以便处理多行输入; - 使用 `CREATE FUNCTION` 声明新函数; - 设置参数 `n` 类型为整数 (`INT`); - 明确指出这个函数会返回一个整数值; - 关键字 `DETERMINISTIC` 表示相同的输入总是会产生相同的结果; - 在 `BEGIN...END` 结构内实现具体业务逻辑——这里是简单的乘法运算; - 最终恢复标准分号作为命令终止标志。 一旦成功执行以上指令集,在后续查询里就可以像这样轻松地利用刚刚建立起来的新功能了: ```sql SELECT Square(5); -- 输出结果应为25 ``` 通过这种方式,不仅可以简化复杂表达式的书写过程,而且有助于提高程序可读性和维护效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值