MYSQL--存储过程操作

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MYSQL--存储过程操作

一:概念:

       存储过程实际上对标了JAVA当中的方法,两者是相似的,同时需要注意的一点是,MYSQL仅仅在5.0版本之后才出现这种存储操作的过程;

     

优点:

      1.存储过程能够让运行的速度变得更加迅速,仅仅只有首次进行实用的时候需要进行相应的编译,之后再次调用的时候可以直接进行实用

       2.存储过程的特点:模块化,代码复用,封装。


二:分类

1.存储过程关键语句

2.变量

3.参数传递

4.分支语句

5.循环语句

6.游标

7.异常处理handler

1.存储过程关键语句:

delimiter (设置启动的标识符);
create procedure (存储过程的名称) (参数传递关键词 参数名称 参数类型);
begin
 (检索代码)
end (开始设置的标识符);
delimiter  ;

2.变量:

1>变量类型:

①:局部变量

②:用户变量

③:参数变量

2>变量介绍:

 ①:局部变量

       范围:顾名思义,局部变量的作用范围比较的小,仅仅只能够作用在存储过程当中的begin--end之间进行实用,一旦超出范围进行调用,检索的时候就无法进行搜索:

       关键语句:

delimiter ..;
create procedure ...()
 
begin
    declare (局部变量名称) 局部变量的类型 [default ....(初始化)];
-- 开始对于局部变量进行赋值
    set (局部变量名称) = ...;
    (其他检索)
end ...;
delimiter ;
 
select (局部变量名称); -- 不成功,因为在存储过程begin-end之外运行
 

②用户变量:

       范围:用户变量的作用范围有所增大,可以作用于当前的会话,也就是作用在当前互联网跟mysql的连接ing

       关键语句:

TIPS:
-- 1.需要注意的一点是,对于所有的用户变量,都不需要进行声明,赋值即声明
-- 2.对于所有的用户变量,都能够在存储过程的外面进行调用
 
delimiter ...;
create procedure ...()
begin 
    set (用户变量名称) =  ;
end ...;
delimiter ;
 
select (用户变量名称); -- 可以搜索到相应的结果

③参数变量:

       参数变量又可以分为两个部分,一个是全局变量,一个是会话变量


               1.全局变量:

                       1>范围:


                       对于全局变量的修改会影响到一整个的服务器,并且对于全局变量来说,在MYSQL启动的时候由服务器自动对他们进行默认初始化,这些默认值可以通过my.in这个文件进行修改


                       2>关键语句:


关键使用语句:global
1.查看全局变量:
select global variables(全局变量名称);
2.查看具体的全局变量
show global@@.(相应的全局变量名称);
3.修改全局变量的值
set global (全局变量名称) = new_value;

2.会话变量:

                       1>作用范围:


                       对于会话变量,会在每一次建立新的连接的时候,MYSQL会对其进行初始化,将全局变量的值赋值一份用来当作当前新建会话的会话变量


                       2>关键语句:


1.查看局部变量
select session variables;
 
2.查看具体的局部变量
select @session.(局部变量名称);
 
3.修改局部变量的值
set session (局部变量名称) =new_value;
 
 

  TIPS: 其实两个变量大体上是一样的,仅仅只有在作用范围上不同,其他的都是一样。因此,如果两个变量都没有修改,那么全局变量跟用户变量的值是一样的,两者并没有区别;



三.参数传递:

       1.类型:参数传递主要分为三个,包括有三个部分分别是in,out,inout

       2.介绍:

               操作:

in:让数据能够进入到存储过程当中进行查询
delimiter \\;
create procedure emp_1(in name varchar(20))
begin 
    select * from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;
 
 
out:能够让参数进行返回使用
delimiter \\;
create procedure emp_2(in name varchar(20),out id int)
begin 
    select e.id into id from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;
 
call emp_2(‘刘一’,@id);
select @id;
 
inout:能够对于输入的值进行修改,之后再进行返回
delimiter \\;
create procedure emp_3(inout name varchar(20))
begin 
    select * from emp e where e.name=name;  -- 第二个name代表的是传入的参数的名称
end \\;
delimiter ;
set name='王老师';
call emp_3(name);


四:分支语句

       1.分类:

        分支语句主要包括有几个部分,if分支,case分支

       2.

               ①:if分支

关键语句:
if (条件) then 
    查询;
elseif (条件...) then
    查询:
else default(设置除了这些之外的其他操作会有什么结果)
endif;
 
 
delimiter \\;
create procedure pro-1(in single int)
begin 
if single=1 
-- 如果输入数字为1那么就显示所有的员工信息;
    then select * from emp;
eles  select '错误选项';
endif;
end \\;
delimiter ;
 
有关if的其他小知识:
leava 表示直接离开当前的条件判断  -- 相当于JAVA当中的break;
iterate 表示的是跳过当前的判断  -- 类似于在java当中的continue;

②case分支:

类似于JAVA当中的switch语句
语法一:
case case_value(变量名称)
    when when_value then select语句
    when when_value then select语句
    [else default]
end case;
 
语法二:
case
    when search_condition then select...
    when search_condition then select...
    [else default]
end case;


五:循环语句:

       循环语句主要可以分为三大类:while , loop ,repeat

       循环是一种虽然只会程序当中出现一次,但是能够运行多次的代码

1.while

while循环类似于JAVA当中的while的循环,都是先判断条件,判断正确之后,可以再执行之后的语句,否则结束循环
 
语句:
while(condition_value) do
循环体
end while;
 
加入到存储过程当中:
 
一:在表格当中插入数据,并且为自己控制插入多少条,设置use1存储过程
create table emp1(
id int primary key,
name varchar(20),
user varchar(20)
);
 
delimiter \\;
create procedure use1(in single int)
begin 
    declare i int default 1;
while(i<=single) do
    insert into emp1 values(i,concat('user',i),'123456');
    set i = i+1;
end while;
 
二:在表格当中插入single_0条数据,但是跳过第single_1条数据,设置use2存储过程
delimiter \\;
create procedure use2(in single_0 int,in single_1 int)
begin
    decalre i int default 1;
w while(i<=single_0) do
    a if(i = single_1) then
    set i = i+1; 
    iterate a;
    else 
    insert into emp values(i,concat('user',i),'123456');
    set i = i+1;
    end if;
end while;
end \\;
delimiter ;

2.repeat循环语句

repeat循环相当于之前在java当中所学习的do-while循环,需要先执行查找语句,之后再进行判断条件
 
语句:
[标签] repeat
循环体;
utile when_value;
end repeat[标签];
 

3.loop循环

loop循环不需要条件的判断,能够一直进行执行,所以,如果需要跳过循环,那么就需要使用相应的if条件判断,从而跳出这个死循环 -- 对应了java当中的while(true)循环
 
语法:
[循环标签] loop 
循环体:
if when_value then....
elseif when_value then...
...leave [循环标签];...
end if;
end loop;


六.游标

1.介绍

       游标是一种能够存储查询结果集的数据类型,在存储过程当中可以使用光标对结果进行一定的循环处理

2.使用

       光标的使用包括:光标的声明,光标的打开,数值的获取,光标的关闭

1-- 声明:
declare 游标名称 cursor for select_statement
-- 打开语法
open 游标名称
-- 取值语法
fetch 游标名称 into decl_name.....
-- 关闭语法
close 游标名称;


七.handler异常处理

1.介绍:

       在MYSQL当中,针对一些错误机制进行处理的方法,通过HANDLER的使用,能够在MYSQL查询的过程当中避免一些错误类型的出现;

2.语法:

handler 异常处理
 
 
声明:declare (handler_action handler)
    for (condition_value) 
        statement;
 
handler_action:主要包括有三大部分
1.contitue  在错误出现之后继续之后的查询
2.exit 在错误出现之后不再进行之后的查询,直接结束所有的查询
3.UNDO不建议
 
condition_value主要包括以下的几个部分
mysql_error_code
condition_name
SQLWARNING 
NOT FOUND 未查询到相应的数据
SQLEXCEPTION SQL查询错误
 
同时的,如果需要使用handler句柄进行异常处理,首先需要考虑:
1.如果发现错误了,之后需要进行什么操作(condition_value)
2.这种错误是什么样的错误类型condition_value
 
 
 
 
TIPS:需要注意的一点,对于各种声明,顺序是,变量声明,游标声明,handler声明的顺序
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
关系型数据库 MySQL
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
18 1
|
1天前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
16 4
|
4天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
13天前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
15 0
「Python入门」python操作MySQL和SqlServer
|
19天前
|
SQL 存储 关系型数据库
|
23天前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
2天前
|
分布式计算 DataWorks 关系型数据库
MaxCompute操作报错合集之配置mysql数据源querysql模式,同步到MC时遇到报错,该怎么处理
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。