系统变量:全局变量、会话变量
自定义变量:用户变量、局部变量
变量由系统提供,不是用户定义,属于服务器层面
使用的语法:
1.查看所有的系统变量
Show global/session variables;
2.查看满足条件的部分系统变量
Show global/session variables like ‘%char%’;
3.查看指定的某个系统变量的值
Select @@global/session.系统变量名
4.为某个系统变量赋值
Set global/session系统变量=值;
或
Set @@global/session.系统变量=值;
5.会话变量
作用域:仅仅针对当前会话(连接)有效
①查看所有的会话变量
Show session variables;
②查看部分会话变量
Show session variables like ‘%char%’;
③查看指定的某个会话变量的值
Select @@ session.会话变量名
④为某个会话变量赋值
Set session会话变量=值;
或
Set @@ session.会话变量=值;
变量是用户自定义的,不是由系统的
1.用户变量
1)作用域:针对于当前会话(连接)有效,同于会话变量的作用域。
2)使用步骤:
①声明并初始化
Set @用户变量名=值;
或
Set @用户变量名:=值;
或
Select @用户变量名:=值;
②赋值(更新用户变量的值)
方式一:
Set @用户变量名=值;
或
Set @用户变量名:=值;
或
Select @用户变量名:=值;
方式二:select into
Select 字段 into 变量名
From 表;
2.局部变量
1)作用域:仅仅在定义它的begin-end 中有效
必须应用在begin-end中的第一句话
2)使用步骤:
①声明
Declare 变量名 类型 default 值;
②赋值
方式一:
Set @局部变量名=值;
或
Set @局部变量名:=值;
或
Select @局部变量名:=值;
方式二:select into
Select 字段 into 局部变量名
From 表;
③使用
Select 局部变量名;
3.对比用户变量和局部变量
作用域:用户变量:当前会话;局部变量:begin-end中
定义和使用的位置:用户变量:会话中任何地方;局部变量:只能在begin-end中,且必须第一句话
语法:用户变量:必须加@符号,不用限定类型;局部变量:一般不用加@符号,需要限定类型
一组预先编译好的SQL语句的集合,可理解成批处理语句
1)存储过程创建
Create procedure 存储过程名(参数列表)
Begin
存储过程体(一组合法的SQL语句)
End
注意:
①参数列表包含三部分:参数模式 、参数名、参数类型
例:in stuname varchar(20);
参数模式: in(该参数可以作为输入,该参数需要调用方传入值)
out(该参数可以作为输出,也就是该参数可以作为返回值)
inout(该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值)
②如果存储过程体中仅仅只有一句话,begin end 可以省略
③存储过程体中的每条SQL语句的结尾必须加分号,存储过程的结尾可以使用delimiter重新设置。其语法为:Delimiter 结束标记
2)存储过程调用
Call 存储过程名(实参列表);
①空参列表
例:
Delimiter $
Create procedure m1()
Begin
Insert into stu(username,id)
Values (‘小李’,’001’),( ‘小方’,’002’)
End $ ;
Call m1() $ ;
②创建带in模式参数的存储过程
例:创建存储过程实现:根据女神名,查询对应的男神信息
Create procedure m2(in beautyname varchar(20))
Begin
Select bo.*
From boys as bo
Right join beauty b on bo.id=b.boyfriend_id
Where b.name=beautyname;
End $ ;
Call m2(‘小红’) $ ;
创建存储过程实现:用户是否登陆成功
Create procedure m3(in username varchar(20),in password varchar(20))
Begin
Declare result int default 0; #声明并初始化
Select count(*) into result #赋值
From admin
Where admin.username=username
And admin.password =password;
Select if (result>0,’成功’,’失败’);#使用
End $ ;
Call m3(‘小红’,‘666666’) $ ;
③创建带out模式的存储过程
例:创建存储过程实现:根据女神名,查询对应的男神信息
Create procedure m4(in beautyname varchar(20),out boyname varchar(20))
Begin
Select bo.boyname into boyname
From boys as bo
inner join beauty b on bo.id=b.boyfriend_id
Where b.name=beautyname;
End $ ;
Call m4(‘小红’,@bname) $ ;
Select @bname $;
④创建带inout模式的存储过程
例:传入a和b两个值,最终a和b都翻倍并返回
Create procedure m5(inout a int,inout b int)
Begin
Set a=a2;
Set b=b2;
End $ ;
其调用过程首先要传入值
Set @m=1$
Set @n=10$
Call m5(@m,@ n) $ ;
Select @m,@n $;
3)存储过程删除
Drop procedure存储过程名
一次只能删除一个存储过程,不支持一次删除多个
4)存储过程查看
Show create procedure 存储过程;
其含义和存储过程相同,函数和存储的区别在于:
存储过程可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数有且仅有一个返回,适合做处理数据后返回一个结果。
1)函数创建
Create function 函数名(参数列表)returns 返回类型
Begin
函数体
End
注意:参数列表的两部分为参数名和参数类型;
函数体里必须有return语句
当函数体中仅有一句话时,begin end可省略
使用delimiter 语句设置结束标记
2)函数调用
Select 函数名(参数列表)
例:
Create function myf1() returns int
Begin
Declare c int default 0; #定义变量
Select count(*) into c #赋值
From employees;
Returns c;
End $
Select myf1()$;
3)函数查看
Show create function 函数名;
4)函数删除
Drop function函数名