mysql 自定义函数错误-1418.md

导读:本篇文章讲解 mysql 自定义函数错误-1418.md,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

自定义函数

# 工资表
CREATE TABLE `test` (
  `id` int NOT NULL auto_increment primary key,
  `salary` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

# 插入数据
insert into test(salary) values(100);
insert into test(salary) values(200);
insert into test(salary) values(200);
insert into test(salary) values(300);

# 查询 工资第 N 的 function
CREATE FUNCTION getSecondSalary(N INT) RETURNS INT
BEGIN
    DECLARE st INT;
    SET st=N-1;
    RETURN(SELECT DISTINCT salary FROM test ORDER BY test.salary DESC LIMIT st,1);
END

# 查询 工资排名第二的数据
SELECT getSecondSalary(2);

控制台错误

> 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 秒

翻译:
在自定义函数里面,只有 DETERMINISTIC, NO SQLREADS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的函数指定一个参数。

原因分析

MySQL8.0的binlog详解

MySql8.0创建自定义函数时报错 –1418

MySQL开启bin-log后,调用存储过程函数触发器时,会出现错误号为1418的错误。

解决

我们开启了bin-log, 我们就必须指定我们的函数:

  1. DETERMINISTIC 不确定的;
  2. NO SQL 没有SQl语句,当然也不会修改数据;
  3. READS SQL DATA 只是读取数据,当然也不会修改数据;
  4. MODIFIES SQL DATA 要修改数据;
  5. CONTAINS SQL 包含了SQL语句;

由于,我自定义的函数,只涉及到数据的查询,所以,使用 READS SQL DATA指定

CREATE FUNCTION getSecondSalary(N INT) RETURNS INT
READS SQL DATA 
BEGIN
    DECLARE st INT;
    SET st=N-1;
    RETURN(SELECT DISTINCT salary FROM test ORDER BY test.salary DESC LIMIT st,1);
END

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69699.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!