MySQL多列日期同步更新的五種實現(xiàn)方法
場景痛點:
當遇到會員有效期、服務周期、數(shù)據(jù)版本等需要批量更新日期字段時,如何精準控制日期部分而保留原始時間?今天教你一套DBA都在用的高效解決方案!
一、基礎版 - DATE_ADD函數(shù)法(推薦)
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';
原理:通過計算新舊日期差值,僅修改日期部分
二、進階版 - 時間拼接法(跨時區(qū)場景適用)
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語句實戰(zhàn)
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;
特殊場景:混合處理包含空值的時間字段
四、全表更新加速方案(百萬級數(shù)據(jù)處理)
-- 啟用事務保證一致性
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 ;
適用場景:需要復雜業(yè)務邏輯的周期性更新任務
高頻問題QA
如何回滾誤操作?
- 提前開啟事務/Binlog備份
- 使用
SELECT ... INTO OUTFILE備份原數(shù)據(jù)
時區(qū)差異如何處理?
SET time_zone = '+8:00'; UPDATE ... CONVERT_TZ(create_time,'UTC','Asia/Shanghai')
性能優(yōu)化建議
- WHERE條件必須使用索引字段
- 避免全表掃描(EXPLAIN分析執(zhí)行計劃)
- 凌晨低峰期執(zhí)行大批量操作
到此這篇關于MySQL多列日期同步更新的五種實現(xiàn)方法的文章就介紹到這了,更多相關MySQL多列日期同步更新內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL之MHA高可用配置及故障切換實現(xiàn)詳細部署步驟
這篇文章主要介紹了MySQL之MHA高可用配置及故障切換實現(xiàn)詳細部署步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
mysql5.7.42到mysql8.2.0的升級(rpm方式)
隨著數(shù)據(jù)量的增長和業(yè)務需求的變更,我們可能需要升級MySQL,本文主要介紹了mysql5.7.42到mysql8.2.0的升級(rpm方式),具有一定的參考價值,感興趣的可以了解一下2024-03-03
MySQL曝中間人攻擊Riddle漏洞可致用戶名密碼泄露的處理方法
Riddle漏洞存在于DBMS Oracle MySQL中,攻擊者可以利用漏洞和中間人身份竊取用戶名和密碼。下面小編給大家?guī)砹薓ySQL曝中間人攻擊Riddle漏洞可致用戶名密碼泄露的處理方法,需要的朋友參考下吧2018-01-01
詳解MySQL和Redis如何保證數(shù)據(jù)一致性
MySQL與Redis都是常用的數(shù)據(jù)存儲和緩存系統(tǒng),為了提高應用程序的性能和可伸縮性,很多應用程序將MySQL和Redis一起使用,其中MySQL作為主要的持久存儲,而Redis作為主要的緩存,那么本文就給大家介紹一下MySQL和Redis如何保證數(shù)據(jù)一致性,需要的朋友可以參考下2023-08-08
記錄無法安裝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

