一、系统变量(系统提供,不用自定义)
1、分类
- 全局变量:服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务器,即针对所有连接(会话)有效
- 会话变量:服务器为每一个连接的客户端都提供了系统变量,作用域为当前连接(会话)
2、查看系统变量
①查看系统变量
show [global|session] variables like ' '; # 默认查看的session变量
②查看指定系统变量的值
select @@[global|session].变量名; # 默认查看的session变量
③为系统变量赋值
【方式一】
set [global|session] 变量名=值;
【方式二】
set @@global.变量名 = 值;
set @@变量名 = 值;
二、自定义变量
1、用户变量
- 作用域 :仅针对当前连接(会话)有效
- 位置:begin end里面,也可以在外面
①声明并赋值
set @变量名 = 值
set @变量名:= 值
select @变量名:= 值
②更新值
【方式一】
set @变量名 = 值
set @变量名:= 值
select @变量名:= 值
【方式二】
select xx into @变量名 from 表; # 值来自于表中的字段
③使用
select @变量名
2、局部变量
- 作用域:仅仅在定义的begin end中有效
- 位置:只能放在begin end中,而且只能放在第一句
①声明
declare 变量名 类型 [default 值]
②赋值或更新
【方式一】
set 变量名 = 值
set 变量名:= 值
select @变量名:= 值
【方式二】
select xx into 变量名 from 表; # 值来自于表中的字段
③使用
select 变量名
三、存储过程
将一组用于完成特定功能的逻辑语句包装起来,对外暴露名字即可
1、创建
1 create procedure 存储过程名(参数模式 参数名 参数类型) 2 begin 3 存储过程体 4 end
【注意】
①参数模式:in out inout
②存储过程体中的每一条sql语句都需要使用;结尾
2、调用
call 存储过程名(实参列表)
①调用in模式下的参数: call sp(值)
②调用out模式下的参数: set @name; call sp(@name); select @name;
③调用inout模式下的参数: set @name = 值; call sp(@name); select @name;
3、查看
show create procedure 存储过程名;
4、删除
drop procedure 存储过程名;
四、函数
将一组用于完成特定功能的逻辑语句包装起来,对外暴露名字即可 -- 有返回值
1、创建
1 create function 函数名(参数名 参数类型) returns 返回类型 2 begin 3 函数体 4 end
【注意】
①函数体中必须要有return语句
2、调用
select 函数名(实参列表);
3、查看
show create function 函数名;
4、删除
drop function 函数名;