首页 > 技术分享 > MySQL
收藏

Mysql获取update标示,Mysql更新数据后返回主键,Mysql变量的运用

06/05 18:36
大潇博客 原创文章,转载请标明出处

首先我简述一下用到这种情况的场景:

需求:需要随机修改某张表中的一条数据,再用这条数据中某个字段的值做其它操作,所以我要拿到被修改这条数据的某个字段的值

在请求量少的情况下,可以用程序生成随机数,再进行其它操作

若请求量较多,程序生成随机数后再操作即不可行,这样做很容易重复操作数据


这种时候的解决方案,可以直接到数据库中进行随机修改,然后拿到已修改数据的主键(或其它字段),再进行其它操作,这样就避免了重复操作数据。


那怎样获取已修改数据的标示呢?用Mysql的变量即可,如下:


SET @update_id := 0;

UPDATE some_table SET row = 'value', id = (SELECT @update_id := id)

WHERE some_other_row = 'blah' LIMIT 1; 

SELECT @update_id;


大致思路是:首先声明一个用户变量 @update_id ,之后在update修改数据时要多更新一个字段,就是将当前主键值更新为当前主键值(其实就是没更新),更新主键值并不是目的,只是为了将当前主键值赋值给@update_id,就是这句:SELECT @update_id := id


如果更新了多条记录也可以用下面的方式:

SET @uids := null;

UPDATE footable

   SET foo = 'bar'

 WHERE fooid > 5

   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );

SELECT @uids;


注:上面的方法不适用于有HAVING、GROUP BY或者ORDER BY子句中,否则可能出入与预期不同的结果。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311