目录

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
;