MYSQL 创建函数出错的解决方案_Mysql

在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况。下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考。

案例一:

目前在项目中,执行创建mysql的函数出错,

mysql 创建函数出错信息如下:

Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

首先检查创建函数的功能是否开启,检查是否开启创建功能的SQL如下:

-- 查看是否开启创建函数的功能
show variables like '%func%';
-- 开启创建函数的功能
set global log_bin_trust_function_creators = 1;

执行完SQL之后发现已经开启了,随检查自己的SQL是否写错(因为SQL是别人给的,在别人环境没问题,在自己的环境就有可能)。

突然发现了确实是SQL出现问题,由于他创建的SQL有指定用户,所以导致出现问题,以下是他的SQL:

DROP FUNCTION IF EXISTS `nextval`;
DELIMITER ;;
CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8
BEGIN
 DECLARE seq_max BIGINT(20);
 UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name;
 SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ;
 RETURN seq_max;
END
;;
DELIMITER ;

由于CREATE_FUNCTION规范,可以发现就是DEFINER这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题。

目前问题已经解决。

-EOF-

案例二:

在MySQL创建用户自定义函数时,报以下错误:

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)

这是因为有一个安全参数没有开启,log_bin_trust_function_creators 默认为0,是不允许function的同步的,开启这个参数,就可以创建成功了。

mysql> show variables like '%fun%';
+---------------------------------+-------+
| Variable_name     | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec) 

mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.00 sec) 

mysql> show variables like '%fun%';
+---------------------------------+-------+
| Variable_name     | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec) 

如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断。

案例三:

Error Code : 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)
(0 ms taken) 

分析:

根据系统提示,导致该错误的原因可能是一个安全设置方面的配置,查手册log_bin_trust_function_creators参数缺省0,是不允许function的同步的,一般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped。

处理过程:

登陆mysql数据库

> set global log_bin_trust_function_creators = 1;
> start slave;

跟踪mysql的启动日志,slave正常运行,问题解决。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql创建函数
, mysql创建函数语法
mysql如何创建函数
mysql创建数据库出错、mysql 自定义函数出错、mysql 创建函数、mysql 创建函数 语法、mysql 创建自定义函数,以便于您获取更多的相关知识。

时间: 2024-10-31 14:11:27

MYSQL 创建函数出错的解决方案_Mysql的相关文章

MYSQL 创建函数出错的解决方案

本文转自IT摆渡网欢迎转载,请标明出处 更多mysq文章请阅读 mysql问题错误修改 在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况.下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考. 案例一: 目前在项目中,执行创建mysql的函数出错, mysql 创建函数出错信息如下: Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this o

sql 函数-mysql创建函数一直提示语句错误

问题描述 mysql创建函数一直提示语句错误 我在数据库的部门表里存的树形结构,在已知子部门时向上查找所有父级部门,写的函数如下 CREATE FUNCTION queryAllDept(@currdeptid varchar(50)) returns varchar(200) BEGIN declare @allname varchar(200) DEFAULT ''; declare @tempname varchar(200) DEFAULT ''; declare @tempparid

MySQL创建存储过程出错

问题描述 MySQL创建存储过程出错 解决方案 答案就在这里:如何在mysql 6.0.2下创建存储过程? 解决方案二: 你确定不是CREATE TABLE ?还有你这截屏这么小?看不清,,,, 解决方案三: 解决方案四: 解决方案五: 不知道,过程怎么创建?

mysql服务启动不了解决方案_Mysql

最近在Windows 2003上的MySQL出现过多次正常运行时无法连接数据库故障,现象是无法连接数据库,也无法停止MySQL或重启MYSQL,重启机子也没有效果,由于每次都是草草尝试各种方法搞定即可,一直没有深入研究,下次一定把图和故障现象系统归纳一下.本文先列一下常见的解决方法. 启动mysql服务出现如下的错误信息(MySQL服务无法启动): 本地计算机无法启动mysql服务. 错误 1067:进程意外终止. 解决方案: 运行 复制代码 代码如下: Cd C:\Program Files\

mysql创建函数出现1418错误的解决办法

本篇文章是对在Mysql中创建函数报"ERROR 1418"的解决方法进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: Error Code : 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_

MySQL创建函数出现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) 这个是创建函数功能未开. (you *might* want to use

MySQL字符串函数详解(推荐)_Mysql

一.ASCII ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. 二.ORD ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码.如果最左面的字符不是一个多字节字符.返回与A

Mysql创建通用设备管理信息系统数据库_Mysql

下面通过图文并茂的方式给大家介绍通用设备管理信息系统数据库的创建过程,具体详情请看下文. 设备表:id,名称,类别,型号,投运日期,购入日期,制造单位,数量,计量单位,使用部门,安装 地点,产品图片,技术数据,备注: 缺陷表:id, 设备id,缺陷描述,处理情况,处理人员: 事故表:id,设备id,事故描述,处理情况,处理人员: 维修类别表:id,类别名称,维修内容,周期(天) 设备类别表:id,类别名称; 部门表:id,部门名称; 设备状态表:id,状态名称 设备状态: 指定设备的状态,其状态

MySQL 自定义函数CREATE FUNCTION示例_Mysql

mysql> mysql> delimiter $$ mysql> mysql> CREATE FUNCTION myFunction -> (in_string VARCHAR(255), -> in_find_str VARCHAR(20), -> in_repl_str VARCHAR(20)) -> -> RETURNS VARCHAR(255) -> BEGIN -> DECLARE l_new_string VARCHAR(25