在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数。

自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。

自定义函数与存储过程之间存在几点区别:

  • 自定义函数不能拥有输出参数,这是因为自定义函数自身就是输出参数;而存储过程可以拥有输出参数。
  • 自定义函数中必须包含一条 RETURN 语句,而这条特殊的 SQL 语句不允许包含于存储过程中。
  • 可以直接对自定义函数进行调用而不需要使用 CALL 语句,而对存储过程的调用需要使用 CALL 语句。

创建并使用自定义函数

可以使用 CREATE FUNCTION 语句创建自定义函数。

语法格式如下:

CREATE FUNCTION <函数名> ( [ <参数1> <类型1> [ , <参数2> <类型2>] ] … )
  RETURNS <类型>
  <函数主体>

语法说明如下:

  • <函数名>:指定自定义函数的名称。注意,自定义函数不能与存储过程具有相同的名称。
  • <参数><类型>:用于指定自定义函数的参数。这里的参数只有名称和类型,不能指定关键字 IN、OUT 和 INOUT。
  • RETURNS<类型>:用于声明自定义函数返回值的数据类型。其中,<类型>用于指定返回值的数据类型。
  • <函数主体>:自定义函数的主体部分,也称函数体。所有在存储过程中使用的 SQL 语句在自定义函数中同样适用,包括前面所介绍的局部变量、SET 语句、流程控制语句、游标等。除此之外,自定义函数体还必须包含一个 RETURN<值> 语句,其中<值>用于指定自定义函数的返回值。

在 RETURN VALUE 语句中包含 SELECT 语句时,SELECT 语句的返回结果只能是一行且只能有一列值。

若要查看数据库中存在哪些自定义函数,可以使用 SHOW FUNCTION STATUS 语句;若要查看数据库中某个具体的自定义函数,可以使用 SHOW CREATE FUNCTION<函数名> 语句,其中<函数名>用于指定该自定义函数的名称。

【实例 1】创建存储函数,名称为 StuNameById,该函数返回 SELECT 语句的查询结果,数值类型为字符串类型,输入的 SQL 语句和执行结果如下所示。

  mysql> CREATE FUNCTION StuNameById()      -> RETURNS VARCHAR(45)      -> RETURN      -> (SELECT name FROM tb_students_info      -> WHERE id=1);  Query OK, 0 rows affected (0.09 sec)

注意:当使用 DELIMITER 命令时,应该避免使用反斜杠“”字符,因为反斜杠是 MySQL 的转义字符。

成功创建自定义函数后,已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击就可以如同调用系统内置函数一样,使用关键字 SELECT 调用用户自定义的函数,语法格式为:

SELECT <自定义函数名> ([<参数> [,…]])

【实例 2】调用自定义函数 StuNameById,查看函数的运行结果,如下所示。

  mysql> SELECT StuNameById();  +---------------+  | StuNameById() |  +---------------+  | Dany          |  +---------------+  1 row in set (0.24 sec)

修改自定义函数

可以使用 ALTER FUNCTION 语句来修改自定义函数的某些相关特征。若要修改自定义函数的内容,则需要先删除该自定义函数,然后重新创建。

删除自定义函数

自定义函数被创建后,一直保存在数据库服务器上以供使用,直至被删除。删除自定义函数的方法与删除存储过程的方法基本一样,可以使用 DROP FUNCTION 语句来实现。

语法格式如下:

DROP FUNCTION [ IF EXISTS ] <自定义函数名>

语法说明如下。
<自定义函数名>:指定要删除的自定义函数的名称。
IF EXISTS:指定关键字,用于防止因误删除不存在的自定义函数而引发错误。

【实例 3】删除自定义函数 StuNameById,查看函数的运行结果,如下所示。

  mysql> DROP FUNCTION StuNameById;  Query OK, 0 rows affected (0.09 sec)  mysql> SELECT StuNameById();  ERROR 1305 (42000): FUNCTION test_db.StuNameById does not exist

MySQL自定义函数(CREATE FUNCTION)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. MySQL自定义函数的使用

    MySQL字定义函数是对sql代码集的封装,我将分享有参数与没有参数的自定义函数的使用 studentinfo表数据: 自定义函数的创建.调用.删除 语法 无参数的自定义函数 # 无参数自定义函数 D ...

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

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

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

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

  9. mysql 自定义函数教程_Mysql 自定义函数

    Mysql 自定义函数怎么用 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT D ...

  10. mysql自定义函数的分号_MySQL 第八篇:自定义函数、存储过程、游标-阿里云开发者社区...

    我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论. 自定义函数 一.函数的概念与定义 1.理解函数 函数可以看作是 ...

最新文章

  1. Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include
  2. PHP版本选择讲解:VC6与VC9,Thread Safe与None-Thread Safe等的选择
  3. javascript打印1-100内的质数
  4. CVE-2020-11945 Squid未授权整数溢出分析
  5. 开课吧课堂之何时调用构造函数
  6. 最近任务 react文章列表
  7. mysql 覆盖式索引_【MySQL】性能优化之 覆盖索引
  8. hdu 2196(求树上每个节点到树上其他节点的最远距离)
  9. Algorithms(forth edition),算法(第四版) algs4.jar 与 algs4-data.zip 网盘下载
  10. position:fixed;支持ie6,清除e6下抖动。
  11. JDBC的批处理和事务
  12. bzoj 1864 三色二叉树
  13. SIP音调通话调研结果
  14. 使用Centos7部署静态网站
  15. 已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)
  16. 基于一维卷积神经网络的滚动轴承故障识别
  17. Apache Zeppelin 简单介绍,以及下载地址
  18. 45-网上商城数据库-商品分类数据操作(二)
  19. k线形态python_如何用Python量化“相似K线”实现形态选股?
  20. HDOJ2036改革春风吹满地笔记——任意多边形求面积

热门文章

  1. DL之FastR-CNN:Fast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  2. Py之gensim:gensim的简介、安装、使用方法之详细攻略
  3. Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展
  4. dijkstra 的优先队列优化
  5. JS_dom查询节点
  6. ecshop php5.4以上版本错误之preg_replace 替换成 preg_replace_callback
  7. 已经到了快元旦,可是总是不自在
  8. 关于UNION ALL与 UNION 用法和区别
  9. thinkphp 创建子应用
  10. ESP8266的一个小问题