MySQL插入数据重复时仅更新Update字段、不存在则新增的实现方法
实现方案
前提配置
首先需要给Name字段创建唯一索引,用于触发重复记录的判定逻辑:
CREATE UNIQUE INDEX idx_animals_name ON Animals(Name);
核心实现语句
使用MySQL原生的INSERT ... ON DUPLICATE KEY UPDATE语法即可满足需求,如果你的表中Publish字段已设置默认值(比如默认当前时间),可以直接用和你原有写法接近的简化语句:
INSERT INTO Animals (Name) VALUES ('Penguin') ON DUPLICATE KEY UPDATE `Update` = CURRENT_TIME;
如果需要显式指定Publish和Update的插入值,可以用完整版:
INSERT INTO Animals (Name, Publish, `Update`) VALUES ('Penguin', '19:00', '19:00') ON DUPLICATE KEY UPDATE `Update` = '19:00';
需要用当前时间的话,把固定时间值替换为CURRENT_TIME即可。
逻辑说明
- 当
Name为Penguin的记录不存在时,语句会正常执行插入逻辑,所有字段按插入规则赋值 - 当
Name为Penguin的记录已存在触发唯一键冲突时,不会新增记录,仅执行后面的更新逻辑,修改该记录的Update字段为指定值,Id、Publish等其他原有字段的值会完全保留
注意事项
Update是MySQL保留关键字,作为字段名使用时必须加反引号`转义,避免语法报错- 不要使用
REPLACE INTO实现该需求:该语法会先删除原有重复记录再插入新记录,会导致原有Id、Publish字段的值丢失,不符合需求
内容的提问来源于stack exchange,提问作者saya-ma
相关产品推荐
相关产品推荐

