MySQL学习教程之存储过程

存储过程

存储过程简称过程,procedure,是一种用来处理数据(增删改)的方式。简单点,我们也可以将其理解为没有返回值的函数。

创建过程

1

2

3

4

5

-- 基本语法

create procedure 过程名([参数列表])

begin

    -- 过程体

end

如果我们定义的过程的过程体内仅含有一条语句,则可以省略begin和end。执行如下语句,进行测试:

1

2

3

-- 创建过程

create procedure pro()

select * from student;

16

如上图所示,我们创建了一个名为pro()的过程,其目的就是为了查询student表中的数据。但实际上,过程多用于处理数据,查询并不多用。

查看过程

查看过程,基本语法为:

show procedure status + [like 'pattern'];

17

查看过程的创建语句,基本语法为:

show create procedure + 过程名;

18

调用过程

由于函数有返回值,因此我们可以用select来调用函数。但是存储过程没有返回值,怎么办?实际上,对于存储过程,有一个专门的调用关键字call,调用过程的基本语法为:

call + 过程名;

19

修改过程 & 删除过程

过程只能先删除后新增,不能修改。删除过程的基本语法为:

drop procedure + 过程名;

执行如下语句,进行测试:

1

2

3

4

-- 删除过程

drop procedure pro;

-- 查看过程

show procedure status like 'pro'\G;

20

过程参数

函数的参数需要指定数据类型,过程比函数更加严格。过程有三种自己的参数类型,分别为:

in,数据只是从过程外部传入给过程内部使用,可以是数值也可以是变量;out,此参数只能传递变量,且变量指向的数据需要先清空然后才能进入过程内部,该引用供过程内部使用,过程结束后可以将变量的值传递给过程外部使用;inout,此参数只能传递变量,该变量的值可以给过程内部使用,过程结束后可以变量的值传递给过程外部使用。

因此,过程定义的具体形式应该为:

procedure 过程名(in 参数名字 参数类型, out 参数名字 参数类型, inout 参数名字 参数类型)

下面,我们定义一个简单的过程,并调用过程。代码如下:

1

2

3

4

5

6

7

8

9

10

11

delimiter $$

create procedure pro2(in var1 int, out var2 int, inout var3 int)

begin

    -- 查看该过程传入的三个变量

    select var1, var2, var3;

end

$$

delimiter ;

 

-- 调用过程

call pro2(1,2,3);

21

如上图所示,过程pro2创建成功。但是,在调用过程的时候出现错误,造成该错误的原因为:过程的out和inout两个参数只能接受变量,而我们传递了具体的数值,报错也就在情理之中啦!接下来,执行如下语句,进行测试:

1

2

3

4

5

6

7

8

9

-- 设置全局变量

set @var1 = 1;

set @var2 = 2;

set @var3 = 3;

 

-- 调用过程

call pro2(@var1, @var2, @var3);

-- 查看变量

select @var1, @var2, @var3;

22

如上图所示,在我们将变量传递给过程的时候,过程正常执行。此外,通过select语句我们可以看到传递给out类型参数的@var2的值在经过过程处理之后,被置为null值啦,这也是符合out类型参数的先清空后使用原则的。而且,由于out和inout只能接受变量作为参数,因此在过程内部对out和inout传入的变量的修改会影响到过程外部。在这里,值得我们注意是:存储过程对变量的操作是滞后的,即只有在过程结束的时候,才会将过程内部修改的值赋值给外部传入的对应的全局变量。执行如下语句,进行测试:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

delimiter $$

create procedure pro3(in var1 int, out var2 int, inout var3 int)

begin

    -- 查看该过程传入的三个变量

    select var1, var2, var3;

    -- 修改局部变量

    set var1 = 10;

    set var2 = 20;

    set var3 = 30;

    -- 查看局部变量

    select var1, var2, var3;

    -- 查看全局变量

    select @var1, @var2, @var3;

    -- 修改全局变量

    set @var1 = 'a';

    set @var2 = 'b';

    set @var3 = 'c';

    -- 查看全局变量

    select @var1, @var2, @var3;    

end

$$

delimiter ;

23

 

1

2

3

4

-- 调用过程

call pro3(@var1, @var2, @var3);

-- 在过程结束后,查看全局变量

select @var1, @var2, @var3;

24

如上图所示,存储过程执行成功,且验证了我们结论,即:在存储过程没有结束的时候,对传入变量的修改并不会影响到对应的全局变量;只有在存储过程结束后,才会将对应的变量值赋值给out和inout类型的变量,而in类型的变量不受影响。

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值