我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql中自定义函数的创建和执行方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql中自定义函数的创建和执行方式

Mysql自定义函数的创建和执行

假设students表中包含id和name两个字段,创建一个函数,函数的作用是根据id查找name

1.创建表,插入数据

create table students(id int,name varchar(100));
insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');

2.创建函数

DELIMITER //
create function find_student(id int) returns varchar(100)
READS SQL DATA
begin
 declare sname varchar(100) default '';
  select students.name into sname from students where students.id=id;
  return sname;
end //
DELIMITER ;

需要注意的事项:

1)使用DELIMITER//修改分隔符

mysql的默认语句结束符号是分号,当mysql遇到分号时就自动执行当前语句。因为函数定义时包含多条sql语句,所以使用DELIMITER //先将分隔符设置为//,等函数创建语句完成后,再将分隔符改回分号即可。

2)READS SQL DATA

之前我没写这句话,但是创建时mysql报错,提示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)

上网查了一下,意思是没有声明mysql函数的类型:

mysql开启了bin-log, 我们就必须指定我们的函数是否是哪种类型:

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

3)使用局部变量

变量定义:我这里使用declare sname varchar(100) default ‘’;定义了局部变量sname,

变量使用:

可以使用select students.name into sname from students where students.id=id;为变量赋值

也可以直接使用set语句来赋值,如set sname=‘test’

3.执行函数:select 函数名(参数值);

select find_student(3);

Mysql自定义函数创建失败问题

案例

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

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

Caused by: Java.sql.SQLException: 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)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2373)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
    at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
    ... 35 more

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

查看是否开启:

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

为on则是开启了

set global log_bin_trust_function_creators = 1;

可以通过这个命令设置,但是MySQL重启后就失效了。

所有最后是通过修改MySQL数据库的配置文件

在配置文件/etc/my.cnf的[mysqld]配置log_bin_trust_function_creators=1

在这里插入图片描述

修改完后重启MySQL。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql中自定义函数的创建和执行方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql中自定义函数的创建和执行方式

目录mysql自定义函数的创建和执行1.创建表,插入数据2.创建函数3.执行函数:select 函数名(参数值);Mysql自定义函数创建失败问题案例总结Mysql自定义函数的创建和执行假设students表中包含id和name两个字段,
2023-03-10

Mysql中自定义函数的创建和执行方法是什么

本文小编为大家详细介绍“Mysql中自定义函数的创建和执行方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql中自定义函数的创建和执行方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mys
2023-03-13

MySQL中怎么创建自定义聚合函数

要在MySQL中创建自定义聚合函数,需要遵循以下步骤:创建一个用于存储函数的数据库或选择一个现有的数据库。CREATE DATABASE my_functions;USE my_functions;创建一个新的自定义函数。下面是一个简单的
MySQL中怎么创建自定义聚合函数
2024-04-30

PHP 用户自定义函数的创建和管理

php 用户自定义函数可以执行特定任务并重复使用。创建自定义函数需要使用特定语法,指定函数名和参数。示例展示了如何计算不同形状的面积。调用自定义函数类似于调用内建函数。管理自定义函数包括注册、删除和查看已创建的函数。创建和管理 PHP 用户
PHP 用户自定义函数的创建和管理
2024-04-14

PHP 预定义函数和用户自定义函数的执行顺序有什么区别?

php 执行函数遵循特定顺序:1. 预定义函数(最高优先级);2. 用户自定义函数(按声明顺序)。预定义函数优先于自定义函数,例如 echo() 在 myfunction() 之前执行。PHP 预定义函数与自定义函数的执行顺序概览PHP
PHP 预定义函数和用户自定义函数的执行顺序有什么区别?
2024-04-17

PHP 函数在创建自定义 Web 服务中的作用

php 函数在创建自定义 web 服务中发挥着至关重要的作用:创建路由器,将请求映射到特定函数。接收并处理请求,利用 $_server、$_get 和 $_post 获取请求数据。使用 php 内置函数(如 json_encode() 和
PHP 函数在创建自定义 Web 服务中的作用
2024-04-24

如何使用golang中的http.NewRequest函数创建自定义的HTTP请求

如何使用golang中的http.NewRequest函数创建自定义的HTTP请求在golang中,我们可以使用http.NewRequest函数创建自定义的HTTP请求。这个函数可以让我们更灵活地控制请求的各个方面,包括请求的方法、URL
如何使用golang中的http.NewRequest函数创建自定义的HTTP请求
2023-11-18

在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么

今天就跟大家聊聊有关在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言systemd是Linux操作系统的系统
2023-06-26

编程热搜

目录