mysql 当变量存在=_mysql update语句的行为根据用户变量是否存在而不同

我正在重置具有重复值或缺少值的排序列,如下所示:

set @last='';

set @sort=NULL;

update conf_profile set sort=

if(

@last=(@last:=concat(org_id,',',profile_type_id,',',page,',',col)),

(@sort:=@sort+1),

(@sort:=0)

)

order by org_id,profile_type_id,page,col,sort,id;

(按多个关键字段逐步指定的顺序浏览所有行

要排序的递增值;当这些字段中的任何一个发生更改时,请在0重新启动。)

似乎只有在@sort变量是在执行更新之前创建的情况下才有效

(尽管它被设置成什么并不重要)。没有“set@sort”,所有

排序值设置为0或空。

你知道为什么会这样吗?mysql版本5.0.51。

更新:详细解释逻辑:在第一行,@last=(@last:=…)

将始终为false,此后,当任何键字段更改时都将为false

从上一行。(注意,没有一个关键字段是concat'd,永远不为空的)。

当它为false时,我们在0(@sort:=0)重新启动排序计数器,否则,它是

递增(@sort:=@sort+1)并使用新值。

在任何情况下,在update语句中设置@sort之前都不会使用它,所以无论

在update语句之前如何设置应该没有区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值