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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

本文小编为大家详细介绍“Mysql中自定义函数的创建和执行方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“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中自定义函数的创建和执行方法是什么

    修改完后重启MySQL。

    读到这里,这篇“Mysql中自定义函数的创建和执行方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    免责声明:

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

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

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

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

    下载Word文档

    猜你喜欢

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

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

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

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

    mysql自定义函数的方法是什么

    在MySQL中,可以使用以下步骤来创建自定义函数:1. 创建函数:使用`CREATE FUNCTION`语句来创建函数,并指定函数的名称、参数列表和返回值的数据类型。例如:```sqlCREATE FUNCTION 函数名(参数列表) RE
    2023-09-11

    创建自定义 PHP 函数与创建 OOP 方法有什么区别?

    自定义函数和面向对象方法用于创建定制代码,但存在语法、作用域和灵活性差异:语法:函数使用 function 关键字定义,方法在类中使用 public 等修饰符。作用域:函数可在脚本中任何位置调用,方法仅通过其类实例调用。灵活性:函数可自由传
    创建自定义 PHP 函数与创建 OOP 方法有什么区别?
    2024-04-22

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

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

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

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

    python中函数的定义方法是什么

    在Python中,函数的定义方法如下:```pythondef function_name(parameters):# 函数体# 可以包含一系列的语句# 可以有返回值# 示例def greet():print("Hello, world!"
    2023-09-13

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

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

    mysql自定义字段的方法是什么

    在MySQL中,可以通过以下两种方法来自定义字段:1. 使用计算字段:- 计算字段是使用表中已有字段计算出来的结果。可以使用算术运算符、字符串函数、日期函数等对已有字段进行操作,并将结果作为计算字段返回。- 计算字段在查询时动态计算,不会在
    2023-09-25

    Flutter构建自定义Widgets的方法是什么

    这篇文章主要讲解了“Flutter构建自定义Widgets的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter构建自定义Widgets的方法是什么”吧!一.组合widge
    2023-06-26

    微信小程序自定义函数的方法是什么

    在微信小程序中,可以通过以下方法自定义函数:1. 在`app.js`中定义全局函数:可以在`App`函数中定义全局函数,这样在整个小程序的生命周期内都可以使用这些函数。```javascriptApp({// 全局函数globalFunct
    2023-09-29

    c语言中函数的定义方法是什么

    在C语言中,函数的定义通常包含以下几个部分:1. 返回类型:函数可以有不同的返回类型,如int、float、void等,用来表示函数返回的数据类型。2. 函数名:用来标识函数的名称,可以根据需要自定义。3. 参数列表:函数可以接受一定数量的
    2023-09-29

    mongodb外部执行创建用户的方法是什么

    在 MongoDB 中,可以使用以下方法来外部执行创建用户的操作:1. 使用 MongoDB 的官方 shell(mongo shell)进行操作:- 打开终端或命令提示符,输入 `mongo` 命令进入 MongoDB shell。- 切
    2023-08-23

    MySQL创建定时任务的方法是什么

    今天小编给大家分享一下MySQL创建定时任务的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。常用的一定要写在前面#
    2023-03-06

    MySQL创建数据表的方法是什么

    MySQL创建数据表的方法有两种:手动创建和使用SQL语句创建。1. 手动创建:可以通过MySQL的图形界面工具,如phpMyAdmin等,在数据库中手动创建数据表。具体步骤为:选择对应的数据库,点击“新建”或“创建表”按钮,在弹出的表单中
    2023-10-20

    搭建spring自定义脚手架的方法是什么

    搭建Spring自定义脚手架的方法主要有以下步骤:创建项目模板:根据项目需求,创建一个基础的项目模板,包括项目结构、配置文件、依赖等。封装代码生成逻辑:编写代码生成器,根据用户输入的参数生成对应的代码文件,可以使用模板引擎来生成代码。定义脚
    搭建spring自定义脚手架的方法是什么
    2024-03-15

    Spring中为bean指定InitMethod和DestroyMethod的执行方法是什么

    Spring中为bean指定InitMethod和DestroyMethod的执行方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.创建一个类/** * @aut
    2023-06-21

    编程热搜

    目录