MySQL多列日期同步更新的五种实现方法

 更新时间:2025年05月27日 09:13:25   作者:sg_knight  
当遇到会员有效期、服务周期、数据版本等需要批量更新日期字段时,如何精准控制日期部分而保留原始时间?所以本文给大家介绍了MySQL多列日期同步更新的五种实现方法,需要的朋友可以参考下

场景痛点:

当遇到会员有效期、服务周期、数据版本等需要批量更新日期字段时,如何精准控制日期部分而保留原始时间?今天教你一套DBA都在用的高效解决方案!

一、基础版 - DATE_ADD函数法(推荐)

UPDATE user_subscription 
SET 
    expire_date = DATE_ADD(expire_date, INTERVAL DATEDIFF('2023-09-01', DATE(expire_date)) DAY),
    last_renew = DATE_ADD(last_renew, INTERVAL DATEDIFF('2023-09-01', DATE(last_renew)) DAY)
WHERE user_type = 'VIP';

原理:通过计算新旧日期差值,仅修改日期部分

二、进阶版 - 时间拼接法(跨时区场景适用)

UPDATE audit_log 
SET 
    start_time = STR_TO_DATE(CONCAT('2023-09-01 ', TIME(start_time)), '%Y-%m-%d %H:%i:%s'),
    end_time = STR_TO_DATE(CONCAT('2023-09-01 ', TIME(end_time)), '%Y-%m-%d %H:%i:%s') 
WHERE log_month = 8;

亮点:完美解决日期时间分离需求,特别适合跨天日志处理

三、条件更新法 - CASE语句实战

UPDATE product_schedule 
SET
    manufacture_date = CASE 
        WHEN TIME(manufacture_date) IS NOT NULL 
        THEN CONCAT('2023-Q3', ' ', TIME(manufacture_date)) 
        ELSE '2023-09-01' END,
    inspection_date = DATE_FORMAT(NOW(), '%Y-%m-%d') + INTERVAL HOUR(inspection_date) HOUR 
                       + INTERVAL MINUTE(inspection_date) MINUTE
WHERE factory_id = 1024;

特殊场景:混合处理包含空值的时间字段

四、全表更新加速方案(百万级数据处理)

-- 启用事务保证一致性
START TRANSACTION;

-- 分批次更新(每次5万条)
UPDATE financial_records 
SET 
    value_date = DATE_FORMAT(value_date, '2023-09-01 %H:%i:%s'),
    clear_date = DATE_ADD(clear_date, INTERVAL 2 DAY) 
WHERE id BETWEEN 1 AND 50000;

COMMIT;

性能提示:添加索引字段条件 + 合理分批避免锁表

五、终极技巧 - 存储过程批量处理

DELIMITER $$
CREATE PROCEDURE batch_update_dates(IN new_date DATE)
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE cur_id INT;
    
    DECLARE cur CURSOR FOR 
        SELECT id FROM orders WHERE status = 'pending';
        
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    OPEN cur;
    
    read_loop: LOOP
        FETCH cur INTO cur_id;
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        UPDATE orders 
        SET 
            estimate_date = CONCAT(new_date, ' ', TIME(estimate_date)),
            actual_date = DATE_ADD(actual_date, INTERVAL DATEDIFF(new_date, DATE(actual_date)) DAY)
        WHERE id = cur_id;
    END LOOP;
    
    CLOSE cur;
END
$$
DELIMITER ;

适用场景:需要复杂业务逻辑的周期性更新任务

高频问题QA

  • 如何回滚误操作?

    • 提前开启事务/Binlog备份
    • 使用SELECT ... INTO OUTFILE备份原数据
  • 时区差异如何处理?

SET time_zone = '+8:00';
UPDATE ... CONVERT_TZ(create_time,'UTC','Asia/Shanghai')
  • 性能优化建议

    • WHERE条件必须使用索引字段
    • 避免全表扫描(EXPLAIN分析执行计划)
    • 凌晨低峰期执行大批量操作

到此这篇关于MySQL多列日期同步更新的五种实现方法的文章就介绍到这了,更多相关MySQL多列日期同步更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Navicat for MySql可视化导入CSV文件

    Navicat for MySql可视化导入CSV文件

    这篇文章主要为大家详细介绍了Navicat for MySql可视化导入CSV文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Mysql启动报ERROR:2002的分析与解决

    Mysql启动报ERROR:2002的分析与解决

    这篇文章主要给大家介绍了关于Mysql启动时报ERROR:2002问题的分析与解决方法,文中通过示例代码介绍将该问题分析的非常详细,对同样遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • mysql视图的学习和使用方式

    mysql视图的学习和使用方式

    这篇文章主要介绍了mysql视图的学习和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2016-09-09
  • Centos6.5在线安装mysql 8.0详细教程

    Centos6.5在线安装mysql 8.0详细教程

    这篇文章主要为大家介绍了Centos6.5在线安装 mysql 8.0详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • MySQL之MHA高可用配置及故障切换实现详细部署步骤

    MySQL之MHA高可用配置及故障切换实现详细部署步骤

    这篇文章主要介绍了MySQL之MHA高可用配置及故障切换实现详细部署步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySQL的安装与配置详细教程

    MySQL的安装与配置详细教程

    MySQL是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的,本文主要以Mysql免安装版为例,帮助大家解决安装与配置mysql的步骤
    2021-06-06
  • mysql5.7.42到mysql8.2.0的升级(rpm方式)

    mysql5.7.42到mysql8.2.0的升级(rpm方式)

    随着数据量的增长和业务需求的变更,我们可能需要升级MySQL,本文主要介绍了mysql5.7.42到mysql8.2.0的升级(rpm方式),具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    Riddle漏洞存在于DBMS Oracle MySQL中,攻击者可以利用漏洞和中间人身份窃取用户名和密码。下面小编给大家带来了MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法,需要的朋友参考下吧
    2018-01-01
  • 详解MySQL和Redis如何保证数据一致性

    详解MySQL和Redis如何保证数据一致性

    MySQL与Redis都是常用的数据存储和缓存系统,为了提高应用程序的性能和可伸缩性,很多应用程序将MySQL和Redis一起使用,其中MySQL作为主要的持久存储,而Redis作为主要的缓存,那么本文就给大家介绍一下MySQL和Redis如何保证数据一致性,需要的朋友可以参考下
    2023-08-08
  • 记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql的解决办法

    记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-G

    在aliyun上安装MySQL时由于上次错误卸载mysql 导致校验文件出问题。下面小编给大家分享记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql的解决方法,需要的朋友参考下吧
    2017-01-01

最新评论