WHCSRL 技术网

学习数据库的第十一天(变量、存储过程及函数、分支结构、循环结构)

变量

系统变量:

变量由系统提供,不是用户定义,属于服务器层面

查看系统变量:

show global|【session 】variables;

根据条件查看系统变量:

show global|【session 】variables like ’ ';

查看指定的系统变量的值

select @@global|【session】 . 系统变量名;

为某个系统变量赋值:

set global|【session】系统变量名 = 值

set @@global|【session】. 系统变量名 = 值

分类:

全局变量:

作用域:服务器每次启动将为所有的全局变量赋初始值,针对所有的会话(连接)有效,但不能跨重启。

会话变量:

作用域:仅仅对当前的连接有效

自定义变量:

变量由用户自定义的,不由系统提供

使用步骤:

声明、赋值、使用

分类:

用户变量

针对当前会话(连接)有效,同于会话变量的作用域

声明并初始化:

set @用户变量名=值
set @用户变量名:=值
select @用户变量名:-值

赋值:

方式一:

通过set或select:
set @用户变量名=值
set @用户变量名:=值
select @用户变量名:-值

方式二:

通过select into

select 字段 into @变量名
from 表

使用:(查看用户变量的值)

select @用户变量名

局部变量

作用域:仅仅在定义它的begin end中有效
应用在begin end的第一句话
声明:

declare 变量名 类型
declare 变量名 类型 default 值

赋值:

方式一:

通过set或select:
set 局部变量名=值
set 局部变量名:=值
select @局部变量名:-值

方式二:

通过select into

select 字段 into 局部变量名
from 表

使用:(查看用户变量的值)

select 局部变量名

用户变量与局部变量的区别

用户变量的作用域是当前会话,定义和使用的地方是会话中的任何地方,使用时必须加上@符号,但不用限定值的类型

局部变量的作用域是在begin end中,定义和使用的位置是begin end的第一句话,一般不需要加上@,但需要限定值的类型

存储过程和函数

存储过程

一组预先编译好的sql语句的集合

优点:

提高重用性
简化操作
提高效率

存储过程的创建

create procedure 存储过程名(参数列表)
begin

存储过程体(一组合法的sql语句)

end

注意:

①参数列表包含三部分:

参数模式 参数名 参数类型

参数模式:
in:该参数可以作为输入,也就是说该参数需要调用方传入值
out:该参数可以作为输出,也就是说该参数可以作为返回值
inout:该参数既可以作为输出又可以作为输入,也就是说该参数既需要传入值,又可以返回值

②如果该存储过程仅仅只有一句话,begin end可以省略
③存储过程的每条sql语句的结尾要求必须加分号,存储过程的结尾可以使用delimiter重新设置。(delimiter 结束标记)

存储过程的调用

call 存储过程名(实参列表)

存储过程的删除

drop procedure 存储过程名;(一次只能删除一个存储过程)

存储过程的查看

show create procedure 存储过程名;

函数

函数和存储过程的区别:

存储过程可以有0个或多个返回,适合做批量插入、批量更新
函数有且仅有1个返回

函数的创建

create function 函数名(参数列表) returns 返回类型
begin

函数体

end

注意:

①参数列表包含两部分:

参数名 参数类型

②函数体肯定会有return语句,没有会报错
③函数体中仅有一句话,begin end可以省略
④使用delimiter语句设置结束标记

函数的调用

select 函数名(参数列表)

函数的查看

show create function 函数名;

函数的删除

drop function 函数名;

分支结构

if函数:

实现简单的双分支

应用域为任何地方

if(表达式1,表达式2,表达式3)
  • 1

表达式1成立,则执行表达式2,否则执行表达式3

case结构:

①类似Java中的switch case语句,一般用于实现等值判断

case 变量|表达式|字段
when 要判断的值 then 返回的值1或语句1;
when 要判断的值 then 返回的值2或语句2;
...
else 返回的值或语句n;
end case;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

②类似Java中的多重if语句,一般用于实现区间判断

case 
when 要判断的条件1 then 返回的值1或语句1;
when 要判断的条件2 then 返回的值2或语句2;
...
else 返回的值或语句n;
end case;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

特点:

①可以作为表达式,嵌套在其他语句中使用,可以放在任何地方

②可以作为语句使用,只能放在begin end中

③如果when中的值满足或条件成立,则执行对应then后面的语句,并且结束case,如果都不满足,则执行else中的语句或值

④如果else省略,且所有when条件都不满足,则返回null

if结构:

功能:实现多分支

应用域:应用在begin end中

if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
【else 语句n;】
end if;
  • 1
  • 2
  • 3
  • 4
  • 5

循环结构

分类:while、loop、repeat

循环控制:

iterate类似于continue,结束本次循环,继续下一次
leave类似于break,结束当前所在循环

while:

【标签:】while 循环条件 do

循环体;

end while【标签】;

loop:

【标签:】loop
循环体;
end loop 【标签】;

repeat:

【标签:】repeat
循环体;
until 结束循环的条件
end repeat 【标签】

推荐阅读