小白终是踏上了这条不归路----小文的mysql学习笔记(21)---------存储过程--存储过程的创建、删除和查看

**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)

小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询

小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查

小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数

小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询


小白终是踏上了这条不归路----小文的mysql学习笔记(目录)
**
含义: 一组预先编译好的SQL语句的集合,理解成批处理语句
好处:      1、提高代码的重用性。
                 2、简化操作。
                 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。

一、创建和调用语法

创建语法:

CREATE    PROCEDURE    存储过程名(参数列表)
BEGIN
             存储过程体(一组合法有效的sql语句)
END

解释:
参数列表一共包括三个部分:参数模式、参数名、参数类型

示例:
在这里插入图片描述
参数模式(共三种)
IN   该参数可以作为输入,也就是该参数需要调用方传入值
OUT   该参数可以作为输出值,也就是该参数可以作为返回值
INOUT   该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。

注意: 如果存储过程体仅仅只有一句话,那么 BEGIN END 可以省略,并且
存储过程体中的每条 SQL 语句的结尾要求必须加分号。
而这时我们存储过程的结尾就需要自己来设置

语法:
delimiter    结束符号

举个栗子:将$设置为我们存储过程的结束符号。
在这里插入图片描述

注意:这里后面不要加分号加了分号的话,就意味着结束符号是$;

调用语法:
call 存储过程名(实参)

那么下面我们来分别来举一下示例来说说上面的几种情况

1、空参的存储过程

空参即括号内没有参数

那么我们来举一个栗子:创建存储过程,实现插入数据

DELIMITER $
CREATE PROCEDURE kz1()
BEGIN
       INSERT INTO admin(`username`,`password`)
        VALUES ("嘉文四世","5555"),("内瑟斯","5555"),("拉克丝","5555");
END $

当然存储过程的创建要在命令提示符里来创建,所以接下来我们在命令提示符里进行创建
在这里插入图片描述
当然虽然我们的sql-yog里不能用,但是我们创建之后刷新sql-yog可以看到已经被创建好了的存储过程
在这里插入图片描述
接下来我们来调用该存储过程
在这里插入图片描述
调用成功,那么我们来查询我们的admin表就会发现已经被插入了三条数据
在这里插入图片描述

2、带in模式的存储过程

案例(1): 创建存储过程实现,根据输入的女神名,查询出对应的男神信息
在这里插入图片描述
调用:查询热巴的男朋友信息
在这里插入图片描述
这便是一个简单的使用,那么下面我们再来做一个案例来理解一下

我们的admin表里面存储的数据就是账号和密码嘛,那么下面我们举一个有关的案例
案例(2): 创建一个存储过程,当用户输入账号和密码时,判断是否登录成功.。

ps:登录成功嘛就是 你输入的账号和密码,在库中找得到,那么符合的数据的个数就不为0,那么就为登录成功,如果你输入的账号和密码,库中找不到,那么个数为0,即为登录失败。
在这里插入图片描述

调用:
ps:创建好了,你就可以进行调用,当然我们库中是没有“德玛西亚”这个用户的所以登陆失败
在这里插入图片描述
注: 当然这个案例你也可以不用设置局部变量的办法,你也可以直接在前面的count(*)那里直接用if函数也是可以的。

3、带out模式的存储过程

同样我们来做一个案例来理解一下

**案例:**根据输入的女神名,返回它的男神的名字
在这里插入图片描述
调用:
在这里插入图片描述
因为这个值赋给了@name这个全局变量 返回,所以我们调用之后再来查它,就是我们想要的结果。
在这里插入图片描述

ps:学到这,我目前感觉的话用 带in模式的也可以完成这种情况,而且要简单一些,然后用out模式,记得要在select 字段 那里进行赋值;然后还有在调用那里要设置一个用户变量,来作为返回的载体;当然这里也可以用多个out来返回多个值,那么后面就要甚至相对数量的定义变量。

那么我们举一个多个返回值的栗子:
案例(2):创建一个存储过程,实现根据输入的女神名,返回男神的名字和魅力值
在这里插入图片描述

ps:这里多个返回值在select 那儿赋值的时候,我们是用逗号隔开,顺序一致

调用:
在这里插入图片描述

4、带inout模式的存储过程

直接上案例:输入任意两个值,然后第一个数2倍返回,第二个数四倍返回
在这里插入图片描述
创建之后,这里的两个number是还没有值的,然后我们需要传入值,那么就是设置两个局部变量。
在这里插入图片描述
于是两个number便有了值,那么接下来我们就可以调用存储过程了
在这里插入图片描述
那么我们传入的值已经 根据我们设定的存储过程 已经进行了执行,那么我就可以来查看结果
在这里插入图片描述
可以看到我们的返回值第一个变成了2倍,第二个变成了4倍。

二、存储过程的删除

语法:drop   procedure   存储过程名

那么下面举一个例子来删除一个存储过程
在这里插入图片描述

ps: 和我们前面的删除表阿删除视图阿语法基本一致,但是视图的删除,可以同时删除很多个;
but 但是这个存储过程的删除一次只能删除一个.

三、存储过程的查看

相当于是查看我们存储过程的结构或者信息

语法:show   create   procedure   存储过程名

案例;查看存储过程kz1
在这里插入图片描述

注意: 我们的存储过程的修改,一般只能修改就上的特点之类的,而且我们存储过程中的逻辑语句是不能修改的,所以我们一般不会修改存储过程。如果你要修改逻辑语句的话,那就只能将该流程控制删除,重新创建一个符合你需要的存储过程

**
      There is an expectation that the other party is in the process of typing.
                                                                          -------------有一种期待叫 对方正在输入中

猜你喜欢

转载自blog.csdn.net/qq_45948983/article/details/105900333