存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值。而存储过程没有直接返回值,主要用于执行操作。

在 MySQL 中,使用 CREATE FUNCTION 语句来创建存储函数,其语法形式如下:

CREATE FUNCTION sp_name ([func_parameter[...]])
RETURNS type
[characteristic ...] routine_body

其中:

  • sp_name 参数:表示存储函数的名称;
  • func_parameter:表示存储函数的参数列表;
  • RETURNS type:指定返回值的类型;
  • characteristic 参数:指定存储函数的特性,该参数的取值与存储过程是一样的;
  • routine_body 参数:表示 SQL 代码的内容,可以用 BEGIN…END 来标示 SQL 代码的开始和结束。

注意:在具体创建函数时,函数名不能与已经存在的函数名重名。除了上述要求外,推荐函数名命名(标识符)为 function_xxx 或者 func_xxx。

func_parameter 可以由多个参数组成,其中每个参数由参数名称和参数类型组成,其形式如下:

[IN | OUT | INOUT] param_name type;

其中:

  • IN 表示输入参数,OUT 表示输出参数,INOUT 表示既可以输入也可以输出;
  • param_name 参数是存储函数的参数名称;
  • type 参数指定存储函数的参数类型,该类型可以是 MySQL 数据库的任意数据类型。

例 1
使用 CREATE FUNCTION 创建查询 tb_student 表中某个学生姓名的函数,SQL 语句和执行过程如下:


mysql> DELIMITER //-> CREATE FUNCTION func_student(id INT(11))-> RETURNS VARCHAR(20)-> COMMENT '查询某个学生的姓名'-> BEGIN-> RETURN(SELECT name FROM tb_student WHERE tb_student.id = id);-> END //
Query OK, 0 rows affected (0.10 sec)
mysql> DELIMITER ;

上述代码中:
1、创建了 func_student 函数,
2、该函数拥有一个类型为 INT(11) 的参数 id,
3、返回值为 VARCHAR(20) 类型。
4、SELECT 语句从 tb_student 表中查询 id 字段值等于所传入参数 id 值的记录,同时返回该条记录的 name 字段值。

创建函数与创建存储过程一样,需要通过命令 DELIMITER // 将 SQL 语句的结束符由“;”修改为“//”,最后通过命令 DELIMITER ; 将结束符号修改成 SQL 语句中默认的结束符号。

如果在存储函数中的 RETURN 语句返回一个类型不同于函数的 RETURNS 子句中指定类型的值,返回值将被强制为恰当的类型。比如,如果一个函数返回一个 ENUM 或 SET 值,但是 RETURN 语句返回一个整数,对于 SET 成员集的相应的 ENUM 成员,从函数返回的值是字符串。

拓展阅读

由于存储函数和存储过程的查看、修改、删除等操作几乎相同,所以我们不再详细讲解如何操作存储函数了。

查看存储函数的语法如下:

SHOW FUNCTION STATUS LIKE 存储函数名;
SHOW CREATE FUNCTION 存储函数名;
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存储函数名;

可以发现,操作存储函数和操作存储过程不同的是将 PROCEDURE 替换成了 FUNCTION。

修改存储函数的语法如下:

ALTER FUNCTION 存储函数名 [ 特征 ... ]

存储函数的特征与存储过程的基本一样。

删除存储过程的语法如下:

DROP FUNCTION [ IF EXISTS ] <函数名>

6、存储函数详解,创建,查看,修改,删除相关推荐

  1. Redis常用配置参数详解及查看修改命令

    目录 Redis常用配置参数 Redis配置参数查看命令 语法 举例 说明: Redis配置参数修改命令 语法 举例 说明: Redis常用配置参数 序号 配置项 说明 1 daemonize no ...

  2. MySQL创建/查看/修改/删除数据库

    一.创建: 实例1:最简单的创建 MySQL 数据库的语句 mysql> CREATE DATABASE test_db; Query OK, 1 row affected (0.12 sec) ...

  3. 共享内存映射之mmap()函数详解

    转 共享内存映射之mmap()函数详解 /span> 查看全文 http://www.taodudu.cc/news/show-3175071.html 相关文章: 子集生成(二进制法,逐步生成 ...

  4. mysql创建存储过程及函数详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...

  5. linux socket send函数和recv函数详解以及修改缓冲区大小

    一.send/recv详解 1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程 ...

  6. 数据结构图,图存储结构详解

    1. 数据结构的图存储结构 我们知道,数据之间的关系有 3 种,分别是 "一对一"."一对多" 和 "多对多",前两种关系的数据可分别用线性 ...

  7. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  8. python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...

    Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...

  9. 【Python入门】Python之OS模块39个常用函数详解

    os,语义操作系统,所以该模块就是操作系统相关的功能了,用于处理文件和目录这些我们日常手动需要做的操作,比如新建文件夹.获取文件列表.删除某个文件.获取文件大小.重命名文件.获取文件修改时间等,该模块 ...

最新文章

  1. 怒刷web前端笔试面试题(一)
  2. 《极乐空间》特效制作与渲染
  3. 用Javascript隐藏超级链接的真实地址
  4. 两个service事务统一_RocketMQ进阶 - 事务消息
  5. [NOI2011]兔兔与蛋蛋游戏 二分图博弈
  6. 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照
  7. 深入学习Redis(4):哨兵
  8. Spring Boot中常见注解诠释
  9. pycharm入门的简易使用教程
  10. MC新手入门(十三)------ 添加游戏角色
  11. java中this,super,extends,implements相关继承概念讲解
  12. Microsoft Edge无法打开测试平台的解决方法
  13. vue3.0开发环境搭建及vue2.x和vue3.x的区别
  14. Word去除段前黑点
  15. 移动端H5强制页面横屏展示
  16. react引入静态图片的方式
  17. 经纬度格式化转换-数据库函数方式
  18. HTML5游戏 看你有多“色” 开发
  19. 站在智慧医院的制高点 阜外华中心血管病医院探索数字化融合实践
  20. 中国队夺金幕后的「AI手语翻译官」:初次上岗,手语可懂度超90%

热门文章

  1. 快速提高CSDN访问量 - 附脚本初代机
  2. 一、Windows Server 2016 AD服务器搭建
  3. Linux系统新建用户用ssh远程登陆显示-bash-4.1$
  4. app微信支付的集成步骤
  5. 【转】centos安装vim7.4
  6. (三) 类图和对象图
  7. 配置Linux两节点SSH密钥信任
  8. 从表达式到函数:表面的简洁
  9. SysTick的优先级是高还是低
  10. stm32外设初始化和设置过程