【mysql】实现设置表中所有数据的update

编程入门 行业动态 更新时间:2024-10-18 21:18:12

【mysql】实现设置表中所有<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据的update"/>

【mysql】实现设置表中所有数据的update

实现效果示例

执行SQL:(mysql 版本查看: select VERSION() :5.7.36-log)

实现效果:

这里最后一个id = 9 > 总条数 6,所以没有更新到,直接手动补下就行

SELECT * FROM `my_test`
SELECT COUNT(*)   FROM my_test;-- 需求:外部系统需要获取10w客户初始数据,通过更新时间来获取
-- 先确定,有没有其他地方拉去客户数据,使用到update_time,如果没有,执行下面步骤:
-- 1.先补全客户头表的所有更新时间:每条1000条设置为一天,从2017-01-01开始,相当于每天更新1000个客户信息
-- 2.更新完之后,检查是否有更新时间为null的,可能存在id号>总条目数的,存在的,直接设置为新的一天就好
-- 3.外部系统从2017-01-01- 开始每天一调
DELIMITER //CREATE PROCEDURE batch_update_my_test()
BEGINDECLARE batch_size INT DEFAULT 2;DECLARE start_date VARCHAR(255) DEFAULT '2017-01-01';DECLARE cur_date VARCHAR(255) DEFAULT start_date;DECLARE total_rows INT;DECLARE current_row INT DEFAULT 0;DECLARE num_batches INT;-- 获取总行数 5SELECT COUNT(*) INTO total_rows FROM my_test;-- 计算批处理数量  3SET num_batches = CEIL(total_rows / batch_size);-- 当当前行号<总条目数时  0 < 5WHILE current_row < total_rows DO-- 2SET current_row = current_row + batch_size;   -- 更新当前批次的数据0<id<2UPDATE my_testSET update_time = cur_dateWHERE id > (current_row - batch_size) AND id <= current_row;-- 设置下次更新日期SET cur_date = DATE_ADD(cur_date, INTERVAL 1 DAY);END WHILE;
END //DELIMITER ;-- 执行存储过程
CALL batch_update_my_test();
-- 查看所有存储过程   
show PROCESSLIST
-- 杀死进程  
kill [进程id]

更多推荐

【mysql】实现设置表中所有数据的update

本文发布于:2023-12-03 10:24:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1654292.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   mysql   update

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!