1.概述
定义:一组为完成某个特定功能的语句集,实质是存放在数据库上的一段代码
作用 —代码复用:通过命名一段长代码进而调用这段代码,其中这段被命名的代码叫过程;若代码有返回值return则叫函数(给我一个自变量,返回结果y=f(x)),函数可看成是特殊的过程)
优点:
1.减少网速流量:存储在服务器端进行,执行速度快
2.高性能:存储过程执行一次后,执行规划就留在高速缓冲存储器,下次用以二进制代码调用即可(计算过程在服务器中进行,只将结果返回给客户端)
3.保护数据库安全性和数据完整性+对访问数据库设置权限
开发分两类: 前端开发—客户端 后端开发—服务端(存储过程/函数)
2.涉及的几个概念
2.1变量
概念:指内存变量,典型代表如字段,用于临时存放数据,变量中的数据会随程序的改变而变化
分类:系统变量 用户变量 局部变量
2.1.1.系统变量
(@@变量名 系统定义的,如事件这个系统变量)
查看事件调度器是否打开
show variables like'event%';--不记得event啥了 用%通配符
select @@event_scheduler;--查看系统变量 两个@@
打开事件调度器
set global event_scheduler=1;--0 false,1 ture)
2.1.2 用户变量
(@变量名 用户自己定义)
目标:通过以下例子体会用户变量的作用
select...into...把选定的列的值存储到变量中
select avg(score) from tb_student where studentno in(select studentno from tb_student where studentname='李明');--idea:想把一长段代码/数据保存到变量中去
select avg(score) into @liming_avg from tb_student where studentno in(select studentno from tb_student where studentname='李明');--做法:在from前+into @自定义名,显示不出来,因为把数据写到了内存变量@liming_avg,得去查看内存变量
select @liming_avg;--查看内存变量的内容(没有from 因为数据在内存中,不在表中)
2.1.3 局部变量
名字由来:只能在begin…end的存储过程体中起作用(只存在于存储过程中,一旦存储过程结束就无效)
使用说明:先declare声明(同时赋予初始值)再set赋值
步骤:
1.declare先声明(声明变量名和数据类型,在存储过程体begin…end…开头处)
2.set赋值:
变量一旦声明,你就能在任何能使用会话变量、文字、列名的地方使用。
2.2.存储过程体
2.2.1declare 局部变量名 数据类型 [defalut value]
2.2.2set 局部变量名=值
declare 局部变量名 数据类型 [defalut value]--默认值有就写,没有则默认为null,涉及计算注意赋初始值
declare score_sum flaot default 0
set 变量名=值
set @user=1;
set found=false;
2.2.3select…into…把选定列的值直接存储到变量中
select avg(score) into pro_avg from tb_score where studentno='1234567890'
2.2.4 流程控制语句
2.2.4.1顺序语句if…then…
2.2.4.2分支语句case…when…then…
2.2.4.3循环语句 while…do…end while;
2.2.5 游标
3.使用案例
3.1查看存储过程/函数
show procedure status \G;
show function status \G;
show create procedure 过程名 \G;
show create function fn_avg \G;
call 过程名(in的参数值,@a);