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表的增删改查(基础)
Apr 05 MySQL
MySQL Shell的介绍以及安装
Apr 24 MySQL
MySQL如何构建数据表索引
May 13 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
mysql 体系结构和存储引擎介绍
May 06 MySQL
详解MySQL的内连接和外连接
May 08 MySQL
MySQL数据库查询进阶之多表查询详解
MySQL中一条SQL查询语句是如何执行的
解决MySQL Varchar 类型尾部空格的问题
Apr 06 #MySQL
mysql的单列多值存储实例详解
Apr 05 #MySQL
详细聊一聊mysql的树形结构存储以及查询
mysql查询结果实现多列拼接查询
Apr 03 #MySQL
mysql使用instr达到in(字符串)的效果
You might like
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
php实现等比例压缩图片
2018/07/26 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
python数组复制拷贝的实现方法
2015/06/09 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python如何统计代码运行的时长
2019/07/24 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
中学教师师德承诺书
2014/05/23 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
云冈石窟导游词
2015/02/04 职场文书
子女赡养老人协议书
2016/03/23 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL