MySQL自定义函数

文章目录

  • MySQL自定义函数
    • 创建自定义函数
    • 自定义函数的调用
    • 自定义函数的删除
    • 自定义函数的维护
    • 流程控制语句
      • 条件控制语句
      • 循环语句

创建自定义函数

创建自定义函数时, 开发人员需提供函数名、函数参数、函数体、返回值等信息,创建自定义函数的语法格式为:

create function 函数名(参数1, 参数2, …)
returns 返回值数据类型
[函数选项]
begin
 函数体;
 return 语句;
end;

注: declare只能放在函数体的最前面, 不能放中间

说明:
1.函数是数据库对象, 创建函数时, 需要打开(选择)数据库
2.函数名不允许重名, 不允许是关键字, 建议在函数名前加前缀"fn_“或后缀”_fn"
3.函数参数是局部变量, 且必须指定数据类型,若函数无参数则是空参数函数
4.函数必须指定返回值数据类型,且必须和returns语句中的返回值数据类型一致(字符串类型的长度可以不同)

5.函数选项由以下一项或几项组成:

language sql
| [not] deterministic
| {contains sql | no sql | reads sql data | modifies sql data}
sql security {definer | invoker}
comment ‘注释’

函数选项说明:
language sql: 默认选项, 说明函数体使用sql语言编写

deterministic(确定性): 该选项是为了防止"复制"时的不一致性。如果函数总是对同样的输入参数产生同样的结果,则被认为是“确定的”,否则就是“不确定的”,默认是not deterministic

contains sql: 默认选项, 表示函数体中不包含读或写数据的语句(例如set命令)
no sql: 表示函数体中不包含sql语句
reads sql data: 表示函数体中包含select查询语句, 但不包含更新语句
modifies sql data: 表示函数体包含更新语句
sql security: 用于指定函数的执行许可

definer: 默认选项, 表示该函数只能由创建者调用
invoker: 表示该函数可以被其它数据库用户调用

comment: 为函数添加功能说明等注释信息

自定义函数的调用

调用自定义函数与调用系统函数的方法一致, 使用select语句。 如果自定义函数有参数, 需要传入参数并且参数的数量和数据类型需要与定义函数时保持一致. 空参数函数不需要传递参数.
例如:

select sname_fn(‘1906030636’)

自定义函数的删除

删除函数使用"drop function 函数名;"
例如:

drop function sname_fn;

自定义函数的维护

函数的维护主要是查看函数的定义,常用方法有以下四种:

  1. 查看当前数据库的所有的自定义函数的信息: “show function status;”
  2. 查看指定数据库中所有自定义函数名,可以使用sql语句(MySQL 8.0版本是没有mysql.proc表的, 8.0以上该表已经由information_schema.routines表平替了, 下面语句供MySQL 5.6版本使用): “select name from MySQL.PROC where DB=‘数据库名’ and TYPE=‘FUNCTION’;”(Windows下的MySQL不区分表名大小写,这里是为了便于区分, 但是数据值是区分大小写的, 别写错了)
  3. 查看指定自定义函数的详细信息: “show create function 函数名;”(建议结尾符使用\G)
  4. 函数的信息都保存在information_schema数据库中的routines表中,使用select语句可以查询函数的相关信息: “select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME=‘函数名’;”(建议结尾符使用\G)

流程控制语句

MySQL中的流程控制语句包括条件控制语句和循环语句, 流程控制语句通常放在begin…end语句块中使用。
条件控制语句分为if语句和case语句,循环语句有where语句、repeat语句、loop语句。

条件控制语句

  • if语句
    if语句用来进行条件判断,根据不同的条件执行不同的操作。if语句执行时,首先判断if语句后的条件是否为真,为真则执行then后的语句,为假就继续执行if,直到为真则执行then后语句,若都不满足,则执行else语句后的内容。

    if 条件表达式1 then 语句块1;
    [elseif 条件表达式2 then 语句块2;]
    [elseif …;]
    [else 语句块n;]
    end if;

    说明: 每个if与最近的end if匹配成if语句, end if后必须以";"结束

    根据判断条件不同, if语句的使用格式有以下几种;

    • 单个判断条件if语句:

      if 条件表达式 then 语句块;
      end if;

    • 两个判断条件if语句:

      if 条件表达式1 then 语句块1;
      else 语句块2;
      end if;

    • 嵌套的if语句:

      if 条件 then 语句块;
      else if 条件 then 语句;
       else if 条件 then 语句; end if;
       end if;
      end if;

  • case语句
    case语句用于实现比if语句分支更为复杂的条件判断,与Java等高级语言不同,MySQL中的case语句不需要使用break跳出.

    case 表达式
    when value1 then 语句1;
    when value2 then 语句2;

    else 语句n;
    end case;

循环语句

MySQL提供了三种循环语句: while, repeat, loop.
MySQL还提供了iterate语句以及leave语句用于循环的内部控制.

  • while语句
    条件表达式的值为true时,反复执行循环体,直到条件表达式的值为false

    [循环标签:] while 条件表达式 do
    循环体;
    end while[循环标签];

    说明: end while后必须以";"结束

  • repeat语句
    条件表达式的值为false时,反复执行循环体,直到条件表达式的值为true.

    [循环标签:] repeat
    循环体;
    until 条件表达式
    end repeat [循环标签];

    说明: end repeat后必须以";"结尾

  • leave语句
    leave语句用于跳出当前的循环语句

    leave 循环标签;

    说明: leave 循环标签后必须以";"结束

  • iterate语句
    iterate语句用于跳出本次循环,继而进行下次循环

    iterate 循环标签;

    说明: iterate 循环标签后必须以";"结束

  • loop语句
    loop循环本身没有停止循环的语句,因此loop通常使用leave语句跳出loop循环

    [循环标签:] loop
    循环体;
    if 条件表达式 then
    leave 循环标签;
    end if;
    end loop;

    说明: end loop后必须以";"结束

MySQL自定义函数的使用及MySQL中的流程控制语句相关推荐

  1. MySQL自定义函数(四十六)

    MySQL自定义函数 一.什么是MYSQL自定义函数? mysql当中的自定义函数,我们简称为UDF,它实际上是一种对MySQL扩展的途径,其用法与内置函数相同. 二.自定义函数应该具备哪些条件? 我 ...

  2. MySQL自定义函数创建与使用总结

    MySQL自定义函数创建与使用总结 MySQL自定义函数和存储过程类似,也需要在数据库中创建并保存.它与存储过程一样,都是由SQL语句和控制语句组成的代码片段,可以被应用程序和其他SQL语句调用. M ...

  3. mysql自定义函数应用_mysql functions实例:在自定义函数中应用字符串函数

    分享一段mysql自定义函数的代码,在其中用到了mysql的字符串函数length. 代码: mysql> delimiter $$ mysql> CREATE FUNCTION myFu ...

  4. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  5. mysql 自定义函数function,函数和存储过程的区别

    From: https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要 ...

  6. mysql 自定义函数入门_【转】MYSQL入门学习之十三:自定义函数的基本操作

    转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com 函数能分返回字符串,整数或实 ...

  7. mysql自定义函数的分号_MySQL之自定义函数实例讲解

    转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...

  8. mysql 自定义函数教程_MySQL自定义函数

    MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体 ...

  9. mysql自定义函数示例代码,以及属性介绍

    以下是一个MySQL自定义函数的示例代码,该函数实现了将指定字符串中的大写字母转换为小写字母的功能: DELIMITER $$ CREATE FUNCTION to_lower(str VARCHAR ...

最新文章

  1. 物联网电子标签助力无人便利店
  2. 权重可以当做概率幅吗?---用神经网络的收敛模拟机械波的波动
  3. .Net Core 部署到Ubuntu 16.04 中的步骤
  4. Laravel 多用户认证
  5. Cassandra1.2文档学习(5)—— Snitch
  6. Java面试题-框架篇九
  7. 自学电脑编程_81岁老太自学编程开发APP,她的日常酷过95%年轻人
  8. ROS+Gazebo仿真差速小车并实现控制
  9. Jquery1.4.1 学习
  10. j2ee 现在已经改名为java ee_Java EE 已经正式更名为 Jakarta EE(雅加达)
  11. Java递归算法实例
  12. Android USB通信开发总结和热敏打印机开发实例解析
  13. 美女图片采集器 源码+解析
  14. turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程
  15. STM32cubemx——超声波测距
  16. python爬取南京市房价_Python的scrapy之爬取链家网房价信息并保存到本地
  17. 《三国塔防》为什么成功?
  18. 重装Windows修复Ubuntu启动
  19. 【计算机网络】网络分层:五层或七层因特网协议栈
  20. 基于语义规则的胶囊网络跨域情感分类:Cross-Domain Sentiment Classification by Capsule Network With Semantic Rules

热门文章

  1. Nmap常用命令及扫描原理
  2. 总线Bus是什么意思
  3. springboot热部署该怎么实现?springboot热部署实现方式
  4. python123.io同一个号可以同时在不同设备登陆吗-ITech8 - 合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下!...
  5. 换行符不换行的原因与解决方法
  6. 最后介绍几个对程序员非常重要的24个软技能
  7. 一个汽车软件测试工程师的三年工作总结
  8. openCV+Python实战练习——银行卡号识别
  9. MySQL--SQL执行顺序详解
  10. python-日历模块