这个是MySQL中倒数第二个比较重要的概念,而且以后会用的比较多,希望大家好好学习。
学习之前还得和大家说一下,还有一个东西叫做存储函数,原本打算扔到一起去说,但是发现不行,怕搞混了,一个一个来吧,今天把这个存储过程说完,分AB两讲,然后明天弄这个存储函数。
存储过程
老样子,直接百科
存储过程是在大型的数据库系统中,为了完成特定功能的SQL语句集合,一次编译好,一直都可以使用,用户通过存储过程的名字,并且给定参数,然后就可以调用执行了。
这个存储过程是在MySQL中存放和执行的,也就是说,这样可以减少服务端和数据库的交互。
简单知道了以后,我们再来说说如何去创建存储过程。
创建存储过程
创建存储过程,同样我们需要用到命令以及特定的关键词,直接上
CREATE PROCEDURE 存储过程的名字(参数1, 参数2,参数3...)
存储过程的特性
具体的执行体;
差不多就这些内容,然后我们仔细来说一下啊。
首先是关键词,PROCEDURE,就是这个定义存储过程的关键词啊。
然后是参数,这里呢,每个参数都是由三个小部分组成,这三个部分分别是:输入输出类型 参数的名称 参数的类型。举例:
(IN 或者 OUT 或者 INOUT) 参数名字xxx 类型,其中IN表示的就是输入,OUT就是输出,最后组合起来的INOUT就是输入输出,也就是既可以是输入,也能是输出。后面的类型,就是MySQL数据库的数据类型,比如 int varchar等等
接着就是存储过程的特性,这个东西比较多,大家仔细看
1. LANGUAGE SQL:这个说明我们的这个具体执行体是由一个或者多条SQL语句组成。
2. (NOT) DETEMINISTIC:指明存储过程中执行的结果是不是确定的,默认呢,是不确定的,也就是FALSE。
啥叫确定的,就是我们每次调用这个存储过程时候,相同的输入等于相同的输出,这个就是确定的,好比我们输入了 1 和 1 ,然后存储过程计算的是和,不管我们啥时候输入 1 和 1 ,答案都是 2 ,这就说明这个是确定的,不确定的就是 1 和 1 有时候输出 2,有时候输出 6 ,这个就是不确定。
3. CONTAINS SQL 或 NO SQL 或者 READS SQL DATA 或者 MODIFIES SQL DATA:这些指明的是子程序使用SQL语句的限制
CONTAINS SQL:这个的意思是包含SQL,具体是指,子程序包含SQL语句,但是不包含读写的语句。
NO SQL:这个很简单啊,就是表示子程序中不包含SQL语句。
READS SQL DATA:这个就是子程序中包含读数据的语句。
MODIFIES SQL DATA:最后这个就是子程序中包含写数据的语句。
默认的,我们是使用的CONTAINS SQL,但是啊,这个特征并不是限制!!!
好,解释完以后,我们来写一个简单的存储过程吧
这个存储过程主要是计算某个性别的学生个数。这里需要指明这个sex是那里的,不然数据库就会懵圈。
很明显啊,OK的,已经创建好了,。
调用存储过程
上面呢,我们创建好了这个存储过程,然后我们来调用一下它,怎么调用呢?
我给出命令
CALL 存储过程的名字(变量1,变量2..., 返回值);
我们再说一下这个返回值,我们上面存储过程返回了一个countNumber,我们怎么去接收呢?
我们需要用到一个东西,叫会话变量
会话变量
MySQL中有两种会话变量,一个是全局会话变量,一个是局部会话变量,我们这里的存储过程就是使用的局部的。
全局会话变量有很多,我们可以使用SQL去查询一下有那些。
SHOW VARIABLES;
我当前的这个MySQL 8.0.19版本是 579 个,然后我们来使用这个其中几个。
我们可以查看到当前版本哦,再来几个
全局变量啊,是存放在我们的MySQL中的,这个就是跟着MySQL的,也就是MySQL内置的一些变量,就类似配置文件一样。
局部变量,就好比这个存储过程,我们就用这一次,用完就没有了。
更重要的是,我们可以使用@去做区分,一个@,就是代表的局部变量,两个@,就是全局。
知道了这个之后,我们来调用一下刚刚的存储过程。
OK的,没有错啊,性别是1的学生就是5个。
删除存储过程
删除是最简单的,怎么删呢?
DROP PROCEDURE 存储过程的名字;
就这样,我们来删除一下这个存储过程
删除掉了,我们再执行一下这个存储过程。
已经不存在了。
今天就讲述这么多,剩下的我们明天说。大家有不懂的地方可以问我,加我QQ:2100363119
点点关注哦~~~