变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。
mysql declare和set定义变量除了一个不加@和一个加@这个区别之外,还有以下区别:
1、declare用来定义局部变量,在对应的begin和end之间,在end之后变量便不起作用了。
2、@用来定义会话变量。
示例:查询对于单笔订单的最大抵用金可用额度(N个抵用金同时消费)
SET @credits := 0;
select * from (
select mdl.id, mdl.credit
, (@credits := @credits+mdl.credit) credits
, expire
from MemberDepositLog mdl
where mdl.member_id = 66666
and mdl.account = 1
and mdl.status = 0
and (mdl.expire is null or mdl.expire > NOW())
and mdl.credit <= 500
order by mdl.expire ASC, mdl.credit ASC
) t1 where t1.credits <= 500