【大数据系列之MySQL】(三十四):存储过程的介绍

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【大数据系列之MySQL】(三十四):存储过程的介绍

存储过程:一组预先编译好的SQL语句的集合,理解成批处理语句,类似于Java中的方法

  • 提高代码的重用性
  • 简化操作
  • 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

创建语法:

create procedure 存储过程名(参数列表)
begin
  存储过程体(一组合法的SQL语句)
end
# 参数列表包含三部分
参数列表 参数名 参数类型
IN stuname varchar(20)

参数模式:

  • IN:该参数可以作为输入,也就是该参数需要调用方传入值
  • OUT:该参数可以作为输出,也就是该参数可以作为返回值
  • INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
  • 如果存储过程体仅仅只有一句话,begin end可以省略
  • 存储过程体中的每条SQL语句的结尾要求必须加分号
  • 存储过程的结尾可以使用delimiter重新设置,语法为 delimiter $
  • 调用语法为 call 存储过程名(实参列表)

空参存储过程:

delimiter $
create procedure myp1()
begin
  insert into boys values(3, 'gom', 123456);
end $
call myp1()

带in存储过程:

create procedure myp2(IN beautyName varchar(20))
begin
  select bo.*
  from boys bo
  right join beauty b on bo.id = b.boyfriend_id
  where b.name = beautyName
end
call myp2('柳岩') $

带out存储过程:

create procedure myp3(IN beautyName varchar(20), OUT boyName varchar(20))
begin
  select bo.boyName INTO boyName
  from boys bo
  inner join beauty b on bo.id = b.boyfriend_id
  where b.name = beautyName
end
call myp3('小昭', @boyName) $
create procedure myp4(IN beautyName varchar(20), OUT boyName varchar(20), OUT userCP INT)
begin
  select bo.boyName, bo.userCP INTO boyName, userCP
  from boys bo
  inner join beauty b on bo.id = b.boyfriend_id
  where b.name = beautyName
end
call myp4('小昭', @boyName, @userCP) $

带INOUT的存储过程:

create procedure myp5(INOUT a INT, INOUT b INT)
begin
  set a=a*2;
  set b=b*2;
end

存储过程的删除:

drop procedure 存储过程名

查看存储过程:

show create procedure myp2;

存储过程和函数的区别:

  • 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
  • 函数:有且仅有1个返回,适合做处理数据后返回一个结果

创建函数:

create function 函数名(参数列表) returns 返回类型
begin
  函数体
end
# 函数体中一定有return语句,否则会报错,要记得使用delimiter语句设置结束标记
# 返回公司的员工个数
create function myf1() returns int
begin
  declare c int default 0;
  select count(*) into c
  from employees;
  return c;
end $
myf1() $

函数的查看和删除:

drop function myf3;
show create function myf3;


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
56 3
|
2月前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
62 0
|
2月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
203 0
|
1月前
|
存储 SQL NoSQL
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
46 5
|
2月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
67 3
|
2月前
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
86 1
|
4月前
|
存储 关系型数据库 MySQL
Mysql表结构同步存储过程(适用于模版表)
Mysql表结构同步存储过程(适用于模版表)
54 0
|
4月前
|
存储 SQL 关系型数据库
MySQL 创建存储过程注意项
MySQL 创建存储过程注意项
50 0
|
5月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
111 0