数据库储存过程分析

生活不止眼前的苟且,还有一辈子的苟且。 
 
储存过程
优点
  • SQL指令无需客户端编写,通过网络传送,可以节省网络开销,同时避免SQL指令在网络传输中被恶意篡改
  • 存储过程经过编译创建并保存在数据库中,执行过程中无需重复操作
  • 存储过程中多个SQL指令之间存在逻辑关系,支持流程控制语句      
缺点
  • 存储过程是根据不同的数据库进行编译执行创建并存储在数据库中,当我们需要切换到其他数据库产品时,需要重新编写针对于新数据库的存储过程的处理
  • 在互联网项目中,如果需要数据库的高并发访问时,使用存储过程会增加数据库连接响应时间

 

创建储存过程的语法

 create procedure <proce_name>([IN/OUT args])
 begin
   
 end;

 

示例:

 -- 创建一个存储过程,实现加法运算
 -- 在存储过程中,是有输入参数和输出参数的

 create procedure proc_test01(IN a int, IN b int, OUT c int)
 begin
   SET c = a + b;    -- 设置c的值为a+b
 end;

调用

 -- 调用存储过程
 -- 定义变量m

 SET @m = 0;
 -- 调用存储过程,将12,23,@m分别传递给a,b,c
 call proc_test01(12, 23, @m);
 -- 显示变量值
 -- dual为系统表,所定义的变量都存储在此表中
 select @m from dual;

 

概念词

变量:局部变量、用户变量、会话变量、全局变量(会话变量和全局变量称为系统变量

 

储存过程中如何定义变量?

  1. 使用set或select直接赋值,变量名以@开头 - set @var=1; 可以在一个会话的任何地方声明,作用域是整个会话,称为用户变量。
  2. 以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量

     declare var1 int default 0;       -- 定义一个局部变量默认值为1;(要用在存储过程中,或者是给存储传参数中)

 

以上2种变量的区别

  在调用存储过程时,以declare声明的变量都会被初始化为null。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。

1、局部变量,只在当前begin/end代码块中有效

2、用户变量,在客户端链接到数据库实例整个过程中用户变量都是有效的。

  MySQL中用户变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
  第一种用法:set @num=1; 或set @num:=1; //这里要使用set语句创建并初始化变量,直接使用@num变量
  第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……,

select语句一般用来输出用户变量,比如select @变量名,用于输出数据源不是表格的数据。(注意两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”)

 

会话变量和全局变量的区别:对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话(也就是当前的数据库连接)。

 

 

储存过程的控制流程

if-else-then

if a=1 then
    -- sql
else 
    -- sql
end if;
-------------------------------
if a=1 then
    -- sql
elseif a=2 then
    -- sql
end if;

 

case

 

循环语句

while,repeat,loop

 

储存过程管理

  1、查询储存过程 - (存储过程是属于某个数据库的,只能在当前数据库中调用该存储过程)    

    查询存储过程状态show procedure status where db = <数据库名>
    查询存储过程的创建细节show create procedure mystudent.stu_fun3;

  2、修改储存过程 - (修改存储过程指的是修改存储过程的特征)

  3、删除储存过程  

drop procedure <proce_name>;
-- 一般会只用以下语句删除
drop procedure if exists <proce_name>

 

 

 

 

 
 
posted @ 2022-07-21 10:14  方达达  阅读(7)  评论(0编辑  收藏  举报