MySQL的存储函数与存储过程的区别解析


Posted in MySQL onApril 08, 2022

MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数。

存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。

存储函数与存储过程的区别

1.存储函数有且只有一个返回值,而存储过程可以有多个返回值,也可以没有返回值。

2.存储函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数。

3.存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,如不能在函数中使用insert,update,delete,create等语句;

4.存储函数只完成查询的工作,可接受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。

5.存储过程可以调用存储函数、但函数不能调用存储过程。

6.存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用.

create function func_name ([param_name type[,...]])
returns type
[characteristic ...] 
begin
    routine_body
end;

参数说明:
(1)func_name :存储函数的名称。
(2)param_name type:可选项,指定存储函数的参数。type参数用于指定存储函数的参数类型,该类型可以是MySQL数据库中所有支持的类型。
(3)RETURNS type:指定返回值的类型。
(4)characteristic:可选项,指定存储函数的特性。
(5)routine_body:SQL代码内容。

create database mydb9_function;
-- 导入测试数据
use mydb9_function;
set global log_bin_trust_function_creators=TRUE; -- 信任子程序的创建者
 
-- 创建存储函数-没有输输入参数
drop function if exists myfunc1_emp;
 
delimiter $$
create function myfunc1_emp() returns int
begin
  declare cnt int default 0;
    select count(*) into  cnt from emp;
  return cnt;
end $$
delimiter ;
-- 调用存储函数
select myfunc1_emp();
-- 创建存储过程-有输入参数
drop function if exists myfunc2_emp;
delimiter $$
create function myfunc2_emp(in_empno int) returns varchar(50)
begin
    declare out_name varchar(50);
    select ename into out_name from emp where  empno = in_empno;
    return out_name;
end $$
delimiter ;
select myfunc2_emp(1008);

到此这篇关于MySQL的存储函数与存储过程的区别的文章就介绍到这了,更多相关MySQL的存储函数与存储过程内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
MySQL 原理与优化之Update 优化
Aug 14 MySQL
MySQL数据库查询进阶之多表查询详解
MySQL中一条SQL查询语句是如何执行的
解决MySQL Varchar 类型尾部空格的问题
Apr 06 #MySQL
mysql的单列多值存储实例详解
Apr 05 #MySQL
详细聊一聊mysql的树形结构存储以及查询
mysql查询结果实现多列拼接查询
Apr 03 #MySQL
mysql使用instr达到in(字符串)的效果
You might like
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
Ajax 数据请求的简单分析
2011/04/05 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
Python中类的初始化特殊方法
2017/12/01 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python搜索包的路径的实现方法
2019/07/19 Python
Python3的socket使用方法详解
2020/02/18 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
上级检查欢迎词
2014/01/18 职场文书
投标担保书范文
2014/04/02 职场文书
护士辞职信怎么写
2015/02/27 职场文书
开工典礼致辞
2015/07/29 职场文书
2015年店长个人工作总结
2015/10/23 职场文书