当前位置: 首页>数据库>正文

仓库卷脚本GOM引擎 刷库存脚本

亲,你有没有遇到过线上需要刷数据的需求,比如把xxx值给我升级xxx。下面我就讲一下mysql稳定的刷数据,保证数据库的平稳无波动

首先有两种方案

一:手撕程序执行修改数据,job执行修改,需要测试,上线,时间不等人要求让你异常的烦躁。

二:手写一个mysql函数跑一下完事。但是你还担心大批量数据下,造成数据库不稳定,造成整个应用抖动。整不好的话,整个数据库锁上了,这个你哭喊出"完犊子了,这下彻底完犊子了"。

来,我给你一个经过实战考验的mysql函数,oracle也可以参考

#一个有道德的函数定义描述
create procedure 一个有意义的函数名字()
  BEGIN
    #最小值
    DECLARE minId int default 0;
    #最大值
    DECLARE maxId int default 0;
    #每次处理的数据量大小,也可以参数传入
    declare incrementNum int default 5000;
    select
      min(主键),
      max(主键)
    into minId, maxId
    from 表名
    where  约定条件1 = '约定条件值1' and 约定条件2 = '约定条件值2';
    WHILE minId <= maxId DO
      BEGIN
        SET minId = minId + incrementNum;
        UPDATE 表名
        SET 需要修改的字段1 = '目标值1', 需要修改的字段2 = '目标值2'
        where 主键 >= minId - incrementNum
              and 主键 < minId
              and 约定条件1 = '约定条件值1'
              and 约定条件2 = '约定条件值2';
        COMMIT;
      END;
    END WHILE;
  END;

call 一个有意义的函数名字();

当然函数也可以有参数传入,自己处理。经过生产三千万级数据考验的脚本,请放心使用吧。建议在测试或者开发环境跑一下

当然大家可以举一反三,可以物理/逻辑删除数据,可以插入数据,可以修改数据,当然了也可以在环境中初始化数据。

最后大家慎用数据库新建函数进行数据处理,一招不慎,满盘皆输。稳有稳的道理。如果非要使用函数处理,请测试清楚,然后请DBA做好备份吧,这是最后的一道防线了。让我们对生产充满敬畏。

提醒:

1:请务必要写好设计文档并切评审,来不及就紧急评审。务必谨记。

2:执行完成后,别忘了删除函数哦。做事要有闭环。


https://www.xamrdz.com/database/6pu1928742.html

相关文章: