MySQL如何用单语句实现双条件下的INSERT IF NOT EXISTS THEN UPDATE?
没问题!其实你只需要先给ogr_no和yurt_id创建一个联合唯一索引,这样就能用INSERT ... ON DUPLICATE KEY UPDATE实现单语句的UPSERT(插入或更新)逻辑了,具体操作如下:
解决方案
1. 创建联合唯一索引
首先得让数据库识别到ogr_no和yurt_id的组合是唯一的,这样当插入重复组合时才会触发更新逻辑。执行这条SQL(记得替换成你的实际表名):
ALTER TABLE 你的数据表名 ADD UNIQUE KEY idx_ogr_yurt (ogr_no, yurt_id);
提示:如果你的表已经存在这两个字段的联合唯一约束,这一步可以跳过。
2. 单语句实现UPSERT
接下来就可以用单条INSERT语句完成需求了,示例代码如下:
INSERT INTO 你的数据表名 (ogr_no, yurt_id, 字段A, 字段B, 字段C) VALUES ('OGR001', 'YURT010', '新值A', '新值B', '新值C') ON DUPLICATE KEY UPDATE 字段A = VALUES(字段A), 字段B = VALUES(字段B), 字段C = VALUES(字段C);
逻辑说明:
- 当插入的
ogr_no+yurt_id组合在表中已存在时,会自动执行UPDATE部分,把指定字段更新为VALUES()里对应的新值; - 如果该组合不存在,就直接插入这条新记录。
如果需要批量处理多条数据,也可以用这种写法:
INSERT INTO 你的数据表名 (ogr_no, yurt_id, 字段A, 字段B) VALUES ('OGR001', 'YURT010', '批量值A1', '批量值B1'), ('OGR002', 'YURT011', '批量值A2', '批量值B2'), ('OGR003', 'YURT012', '批量值A3', '批量值B3') ON DUPLICATE KEY UPDATE 字段A = VALUES(字段A), 字段B = VALUES(字段B);
内容的提问来源于stack exchange,提问作者Samir
相关产品推荐
相关产品推荐

