目录
1.用户变量
2.系统变量(全局变量)
3.局部变量
4.sql中使用变量
mysql变量分: 系统变量(全局变量),局部变量和用户变量。
1.用户变量
仅对当前客户端有效,当退出客户端变量会被释放。
(1)用户变量定义:@变量名
(2)用户变量赋值:set @test=1; 或者 select @test,@tt:=2; 或者 select @num:=字段名 from 表名;
(3)查看变量的值:select @tt;
注:如果使用没有初始化的变量,其值是NULL。使用set赋值时,使用的是“=”,使用select赋值时使用的是“:="。
2.系统变量(全局变量)
当服务器运行时许多变量可以动态更改,不需要停止并重启服务器。
show vairables语句查看系统变量的值
mysql> show variables like 'log%'; mysql> show variables where Variable_name like 'log%' and value='ON';
可以通过@@或global来操作系统变量,如下:
mysql> SET GLOBAL sort_buffer_size=value; mysql> SET @@global.sort_buffer_size=value;
3.局部变量
作用范围在begin到end语句块之间。在该语句块里设置的变量成为局部变量。
(1)定义
declare语句专门用于定义局部变量。
begin
declare test int;
end;
(2)赋值
set语句进行赋值:set i=500;
4.sql中使用变量
引入用户变量前必须使用set语句或select语句来定义并赋值,否则变量为空值。
(1)显示行号
select
@rownum := @rownum+1 as no, -- 行号
u.*
from test.amz_daily_seo u,
(select @rownum := 0 ) a -- 为变量赋初始值
;
(2)分组排序
create table test.temp_var_test_01 as
select
@rownum:=@rownum+1 -- 行号
-- @pdept为上条记录的asin值,若等于本条记录的asin值 则 @rank:=@rank+1 , 否则 @rank:=1
,if(@pdept=b.asin,@rank:=@rank+1,@rank:=1) as rank_1
-- 将本条记录asin值传递给@pdept,注意@pdept初始化值为null
,@pdept:=b.asin
,b.*
from (
select a.*
from test.amz_daily_seo a
order by asin ,request_date desc
) b
join (select @rownum :=0 , @pdept := null,@rank:=0) c on 1=1
;