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的join buffer原理
Apr 29 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
MySQL导致索引失效的几种情况
Jun 25 MySQL
MySQL数据库查询进阶之多表查询详解
MySQL中一条SQL查询语句是如何执行的
解决MySQL Varchar 类型尾部空格的问题
Apr 06 #MySQL
mysql的单列多值存储实例详解
Apr 05 #MySQL
详细聊一聊mysql的树形结构存储以及查询
mysql查询结果实现多列拼接查询
Apr 03 #MySQL
mysql使用instr达到in(字符串)的效果
You might like
第十三节 对象串行化 [13]
2006/10/09 PHP
十天学会php之第七天
2006/10/09 PHP
php 变量定义方法
2009/06/14 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
python编写爬虫小程序
2015/05/14 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
怎样写好自我鉴定
2013/12/04 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
党员服务承诺书
2014/05/28 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
学习心理学的体会
2014/11/07 职场文书
个人收入证明格式
2015/06/24 职场文书
大学学生会竞选稿
2015/11/19 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python