Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 存储过程

MySQL 存储过程

作者头像
Demo_Null
发布于 2020-09-28 09:43:10
发布于 2020-09-28 09:43:10
13.8K00
代码可运行
举报
文章被收录于专栏:Java 学习Java 学习
运行总次数:0
代码可运行

1.1 简介

1.1.1 概述

  MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

1.1.2 优缺点

优点  ① 存储过程可封装,并隐藏复杂的商业逻辑。  ② 存储过程可以回传值,并可以接受参数。  ③ 存储过程无法使用 select 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。  ④ 存储过程可以用在数据检验,强制实行商业逻辑等。

缺点  ① 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他的数据库系统时,需要重写原有的存储过程。  ② 存储过程的性能调校与撰写,受限于各种数据库系统。

1.1.3 阿里规约

1.2 存储过程的使用

1.2.1 创建存储过程

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create procedure 存储过程名([参数模式] 参数名 参数类型)
begin
	# 变量定义
	declare name type default value;
	# 变量赋值
	SET name = value; 
	
    存储过程体
end

参数模式

in:该参数可以作为输入,也就是该参数需要调用方传入值。 out:该参数可以作为输出,也就是说该参数可以作为返回值。 inout:该参数既可以作为输入也可以作为输出,也就是说该参数需要在调用的时候传入值,又可以作为返回值。

注意

 ① 参数模式默认为 in。  ② 一个存储过程可以有多个输入、多个输出、多个输入输出参数。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 无参数
mysql> create procedure showtest()
	begin
		select * from test;
	end;
Query OK, 0 rows affected (0.07 sec)


# in 参数
mysql> create procedure instest(id int, money varchar(20))
	begin
		insert into test values (id, money);
	end;
Query OK, 0 rows affected (0.06 sec)


# out 参数
mysql> create procedure test1(out a int, out b int)
	begin
		set a = 2 * 2;
    	select count(*) into b from test;
	end;
Query OK, 0 rows affected (0.08 sec)

mysql> call test1(@a,@b);
Query OK, 1 row affected (0.06 sec)

mysql> select @a,@b;
+----+----+
| @a | @b |
+----+----+
|  4 |  4 |
+----+----+
1 row in set (0.12 sec)


# 使用流程控制语句
mysql> create procedure sumnum() 
    begin
    	# default 是指定该变量的默认值
        declare sum int default 0;  
        declare i int default 1;
        declare a int default 100;
        
	    while i <= a do # 循环开始
	        set sum = sum + i;
	        set i = i + 1;
	    end while; # 循环结束
	    select sum;  # 输出结果
    end;
Query OK, 0 rows affected (0.06 sec)

1.2.2 查看存储过程

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show create procedure 存储过程名称;

示例

1.2.3 调用存储过程

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
call 存储过程名称(参数列表);

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> call showtest;
+----+-------+
| id | money |
+----+-------+
|  1 | 1000  |
|  2 | 1000  |
+----+-------+
2 rows in set (0.12 sec)
Query OK, 0 rows affected (0.05 sec)

mysql> call instest(3, '1000');
Query OK, 1 row affected (0.07 sec)

mysql> call showtest;
+------+-------+
| id   | money |
+------+-------+
|    1 | 1000  |
|    2 | 1000  |
|    3 | 1000  |
+------+-------+
3 rows in set (0.10 sec)
Query OK, 0 rows affected (0.05 sec)

1.2.4 修改存储过程

存储过程不能修改,只能先删除,然后重新创建

1.2.5 删除存储过程

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# if exites 可以省略,但是不建议
drop procedure [if exists] 存储过程名称;

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> drop procedure if exists showtest;
Query OK, 0 rows affected (0.07 sec)

1.3 自定义函数

1.3.1 创建函数

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 参数可选, 返回值必须要有,否则会报错
create function 函数名(参数名称 参数类型) returns 返回值类型
begin
    函数体
end

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> create function fun() returns int
	begin
		declare sum int;
		select count(*) into sum from test;
		return sum;
	end;
Query OK, 0 rows affected (0.07 sec)

1.3.2 查看函数

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show create function 函数名;

示例

1.3.3 调用函数

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 函数名(实参列表);

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select fun();
+-------+
| fun() |
+-------+
|     3 |
+-------+
1 row in set (0.14 sec)

1.3.4 删除函数

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop function [if exists] 函数名;

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> drop function if exists fun;
Query OK, 0 rows affected (0.07 sec)

1.3.5 存储过程与函数的区别

  存储过程的关键字为 procedure,返回值可以有多个,调用时用 call,一般用于执行比较复杂的的过程体、更新、创建等语句。函数的关键字为 function,返回值必须有一个,调用用 select,一般用于查询单个值并返回。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL自定义函数与存储过程示例
函数:可以完成特定功能的一段SQL集合。MySQL支持自定义函数来完成特定的业务功能。 创建自定义函数(User Defined Function 简称UDF)的语法如下:
星哥玩云
2022/08/17
1.7K0
Mysql之存储过程
改变分隔符 (DELIMITER) 主要是为了避免语句结束符(;)与存储过程、触发器等程序块中的语法冲突。如图一所示:
猫咪-9527
2025/04/24
1230
Mysql之存储过程
MySQL 中的流程控制语句
说明  ① 标签是给 while 取个名字,标签和 iterate、leave 结合用于在循环内部对循环进行控制。  ② 个循环先判断条件,条件成立之后,才会执行循环体,每次执行都会先进行判断。
Demo_Null
2020/09/28
1.7K0
【愚公系列】2023年03月 Java教学课程 103-MySQL数据库(存储过程和函数)
存储过程是一组预定义的SQL语句集合,它们被存储在数据库中并可以被重复调用。存储过程可以接收参数、执行一系列SQL操作并返回结果。
愚公搬代码
2023/03/28
1.2K0
【MySQL高级】存储过程和函数
存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
陶然同学
2023/02/24
1K0
【MySQL高级】存储过程和函数
Mysql高级7-存储过程
  存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库sql语言层面的代码封装与重用。
Se7eN_HOU
2023/08/15
8400
MySQL基础之存储过程和函数
-----------------------------案例演示-----------------------------------**
yuanshuai
2022/08/22
4840
MySQL数据库,详解流程控制语句(二)
CREATE PROCEDURE proc1(id int,sex_str varchar(8),name varchar(16))
用户1289394
2021/11/23
3980
MySQL数据库,详解流程控制语句(三)
3. loop:类似于java中的while(true)死循环,需要在内部进⾏控制。
用户1289394
2021/11/23
6250
MySQL 之存储过程
存储过程是数据库存储的一个重要的功能,MySQL在5.0以前的版本不支持存储过程,存储过程可以在大大提高数据库处理速度的同时提高数据库编程的灵活性。 1、什么是存储过程? 存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此成为存储过程。当以后需要数据库提供与定义好的存储过程的功能相同的服务时,只需要调用“CALL 存储过程名字”即可自动完成。
小手冰凉
2020/05/11
2.6K0
关系数据库之存储过程
A strong, positive self-image is the best possible preparation for success.
小闫同学啊
2020/02/29
1.3K0
mysql-存储过程(转载)
转自(http://www.cnblogs.com/exmyth/p/3303470.html)
用户2038589
2018/09/06
9560
MySQL存储过程与函数精讲
MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。
小熊学Java
2023/07/16
6010
MySQL存储过程与函数精讲
Mysql系列第十七讲 流程控制语句(高手进阶)
分析一下:数据库中性别用数字表示的,我们需要将其转换为(男、女),可以使用if函数。
易兮科技
2020/10/09
9360
Mysql的存储过程
参考:https://www.runoob.com/w3cnote/mysql-stored-procedure.html
别先生
2021/12/09
6.8K0
存储过程和触发器
       存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
用户9979303
2022/10/28
8070
sql存储过程和函数
h3110_w0r1d
2024/02/19
1430
Mysql数据库-存储过程
好了,目前我们已经大概理解了什么是 用户变量,然后我们就可以开始学习使用 用户变量 来进行 参数传递 的使用了。
Devops海洋的渔夫
2022/01/17
11.1K0
Mysql数据库-存储过程
MySQL 存储过程与函数(精简笔记)
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,该笔记用于生产环境快速查阅.
王瑞MVP
2022/12/28
2K0
玩转Mysql系列 - 第18篇:流程控制语句(高手进阶)
上一篇存储过程&自定义函数,对存储过程和自定义函数做了一个简单的介绍,但是如何能够写出复杂的存储过程和函数呢?
路人甲Java
2019/10/09
1.4K0
相关推荐
MySQL自定义函数与存储过程示例
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档