系统变量:
是MySQL服务提供的,不是用户定义的,属于服务器层面的,分为全局变量(GLOBAL)和会话变量(SESSION)。
查看系统变量:
-- 方式一
SHOW [SESSION|GLOBAL] VARIABLES; -- 查看所有的系统变量,默认是SESSION级别的。
-- 例子
SHOW SESSION VARIABLES; -- 查看SESSION级别的全局变量
SHOW GLOBAL VARIABLES; -- 查看GLOBAL级别的全局变量
SHOW [SESSION|GLOBAL] VARIABLES like 'xxx'; -- 可以通过like模糊查询系统变量
-- 方二
SELECT @@[SESSION|GLOBAL] 系统变量名; -- 查看指定变量的值
-- 例子
SELECT @@SESSION.autocommit; -- 查看SESSION级别的全局变量
SELECT @@GLOBAL.autocommit; -- 查看GLOBAL级别的全局变量
SELECT @@autocommit; -- 默认查看SESSION级别的全局变量
设置系统变量
SET [SESSION|GLOBAL] 系统变量名称 = 值;
-- 例子
SET SESSION autocommit = 0; -- 设置session级别的自动提交状态
SET GLOBAL autocommit = 0; -- 设置GLOBAL级别的自动提交状态
-- 两个@表示的是系统变量
SET @@[SESSION|GLOBAL] 系统变量名称 = 值;
用户自定义变量
用户定义变量 使用户根据需要自己定义的变量,用户变量不需要提前声明,在用的时候直接用 @变量名 使用就可以。其作用域为当前链接。
赋值:可以使用 =和 := 赋值,建议使用 := 可以查询条件中的 = 等于符号区分开来。
-- SET 方式赋值
SET @var_name = 'zaizai'; --使用 = 符号直接赋值,定义一个变量名为 var_name 的变量
SET @var_name := 'zaizai'; --使用 := 符号直接赋值,定义一个变量名为 var_name 的变量
-- 同时定义多个变量并赋值
SET @var_name = 'zaizai',@var_sex = 'M',@var_age = 20;
-- select方式赋值
select @var_name := 'zaizai'; -- 使用 select 加 := 的方式直接定义变量 var_name
-- 从tb_user 表查询user_id = 'xxx' 的user_name赋值给变量var_name
select user_name into @var_name from tb_user where user_id = 'xxx';
-- select定义变量还可以将函数结果赋值给变量,例如统计学生人数总数赋值给变量 count_stu
select count(*) into @count_stu from tb_stu
使用
-- 直接查看var_name变量的值
select @var_name;
-- 同时查看多个变量值
select @var_name, @var_sex, @var_age;
注意点:用户变量是直接使用的,不需要提前那定义的,对于没有定义过的变量,直接查询其值,默认是 null
局部变量
局部变量是根据需要定义在局部生效的变量,访问之前需要使用DECLARE声明。可用作储存过程内的局部变量和输入参数,局部变量的范围是在其声明内的BEGIN ... END块中。
声明局部变量
DECLARE 变量名 变量类型 [DEFAULT ...]
变量类型是数据库字段类型:int、bigint、char、varchar、date、time等等
赋值
set 变量名 = 值;
set 变量名 := 值;
select 字段名 into 变量名 from 表名 ...;
例子:定义临时变量,将学生统计人数赋值给临时变量
-- 定义存储过程
CREATE PROCEDURE tempCount()
begin
--int 变量类型是int default 0 变量默认值是 0
declare stu_count int default 0;
select count(*) into stu_count from table_stu;
select stu_count;
end;
-- 调用存储过程
call tempCount();
注意:转载请携带文章源地址