You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7如何实现带条件判断的ON DUPLICATE KEY UPDATE功能?

结论

MySQL 5.7 原生支持在 ON DUPLICATE KEY UPDATE 语法中加入条件判断,你这个需求完全可以用单条 INSERT 语句实现,无需先查询比对数据。

前置操作

首先需要给 name 字段添加唯一索引,这样才能触发冲突检测逻辑:

ALTER TABLE t ADD UNIQUE KEY uk_name (name);
实现语句

直接使用 IF 函数做条件判断即可,VALUES(字段名) 指代本次待插入的对应字段值,不带前缀的字段名指代表中已存在的旧记录值:

INSERT INTO t (name, value, lastupdate)
VALUES 
    ('a', 20, '2021-01-01'),
    ('b', 40, '2021-01-01'),
    ('c', 60, '2021-04-01')
ON DUPLICATE KEY UPDATE
    value = IF(VALUES(lastupdate) >= lastupdate, VALUES(value), value);
执行结果验证

执行后表内数据和你给出的预期结果完全一致:

namevaluelastupdate
a202021-01-01
b202021-02-01
c602021-03-01
补充说明

如果后续需求调整为时间符合条件时同步更新 lastupdate 字段,只需要在 ON DUPLICATE KEY UPDATE 后追加对应逻辑即可:

ON DUPLICATE KEY UPDATE
    value = IF(VALUES(lastupdate) >= lastupdate, VALUES(value), value),
    lastupdate = IF(VALUES(lastupdate) >= lastupdate, VALUES(lastupdate), lastupdate)

内容的提问来源于stack exchange,提问作者Thallius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:45:09