15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天

15天学习MySQL计划-存储过程/变量/判断/循环/游标/函数/触发器(进阶篇)-第九天

存储过程

1.介绍

存储过程是事先经过编译并存储是数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。


存储过程思路上很简单,就是数据库SQL语言层面的代码封装与重用。


b0c898207fa44a11824f07c93eb45ef4.png


特点


封装,复用

可以接受参数,也可以返回数据

减少网络交互,效率提升


2.存储过程语法

1.创建

注意:在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束符

delimiter 结束符(默认为;)
create procedure 存储过程名称([参数列表])
begin
  --SQL列表;
end;

2.调用

call 名称 ([参数]);


3.查看

select * from information_schema.routines where routine_schema = 'xxx' --查询指定数据库的存储过程及状态信息
show create procedure 存储过程名称; --查询某个存储过程的定义

4.删除

drop procedure [if exists] 存储过程名称;


3.变量

系统变量是MySQL服务器提供的,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL),会话变量(SESSION)。

1.查看系统变量

show [session|global] variables; --查看所有系统变量
show [session|global] variables like '%'; --可以通过like模糊匹配方式查找变量
select @@[session|global] 系统变量名; --查看指定变量值

2.设置系统变量

set [session|global] 系统变量名 = 值;
set @@[session | global] 系统变量名 = 值;


注意:

  • 如果没有指定session/global,默认是session,会话变量。
  • MySQL服务重新启动之后,所有设置的全局参数会失效,要不想失效,可以在/etc/my.cnf中配置

3.用户变量

用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”就可以。其作用域为当前连接。

赋值(在变量名前加一个@,两个为系统变量)

set @var_name = expr [,@var_name=expr];
set @var_name := expr [,@var_name:=expr];
select 字段名 into @变量名 from 表名;

使用

select @var_name;


注意:

用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。

4.局部变量

局部变量是根据需要定义的局部生效的变量,访问之前,需要declare声明。可用作存储内的局部变量和输入参数,局部变量的范围是在其内声明的begin…end块中。

1.声明

declare 变量名 变量类型 [default ...];
变量类型:int,bigint,char,varchar,date,time等。

2.赋值

set 变量名=值;
select 字段名 into 变量名 from 表名;

4.判断/循环/多分支/游标

1.if判断

语法:

if 条件1 then
  ...
elseif 条件2 then --可选
  ...
else       --可选
  ...
end if;

例子:

mysql> delimiter $
mysql> create procedure test() 
begin 
  declare sal int default 80; 
  declare result varchar(10); 
if sal>=90 then 
  set result='A'; 
elseif sal >=80 then 
  set result='B'; 
else 
  set result='C'; 
end if; 
select result; 
end;$
mysql> delimiter ;
mysql> call test;

2.参数

image.png

例子1:

mysql> delimiter $
mysql> create procedure test1(in sal int,out result varchar(10)) 
begin 
if sal>=90 then 
  set result='A'; 
elseif sal >=80 then 
  set result='B'; 
else 
  set result='C'; 
end if; 
end;$
mysql> delimiter ;
mysql> call test1(100,@result);
mysql> select @result;
+---------+
| @result |
+---------+
| A       |
+---------+
1 row in set (0.00 sec)

例子2:

mysql> delimiter $
mysql> create procedure test2(inout sal int) 
  begin set sal=sal*0.5; 
end$
mysql> set @sal=100;
mysql> call test2(@sal);
mysql> select @sal$
+------+
| @sal |
+------+
|   50 |
+------+
1 row in set (0.00 sec)

3.流程控制(case)

语法一:

case case_value
  when when_value1 then statement_list1
  [when when_value2 then statement_list2]
  [else statement_list]
end case;


语法二:

case case_value
  when search_condition then statement_list1
  [when search_condition then statement_list2]
  [else statement_list]
end case;


27e58a2ea45c42b9892bec94151c6880.png

create procedure quarter(in num int) 
begin 
case  
when num<=3 then 
  select '1'; 
when num<=6 then 
  select '2'; 
when num<=9 then 
  select '3'; 
when num<=12 then 
  select '4'; 
else 
  select 'error'; 
end case; 
end$
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的触发器数量之谜
【8月更文挑战第31天】
35 0
|
3月前
|
SQL 数据采集 关系型数据库
|
3月前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
|
5月前
|
运维 Serverless KVM
函数计算产品使用问题之如何处理冷启动时间过长的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
监控 Serverless 持续交付
函数计算产品使用问题之如何使用定时触发器预热函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
JSON Serverless 对象存储
函数计算产品使用问题之如何创建一个同时具有HTTP触发器和OSS触发器的函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 SQL 数据库
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
|
5月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
5月前
|
监控 Serverless 持续交付
函数计算产品使用问题之如何使用定时触发器预热函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。