MySQL如何基于非主键多字段判断实现插入存在则更新逻辑
MySQL 插入/更新需求实现方案
要实现基于uuid+responseId重复时更新response字段的需求,不需要先查询再分逻辑执行,仅需两步即可通过原生INSERT ... ON DUPLICATE KEY UPDATE语法实现:
- 第一步:为
uuid和responseId字段创建联合唯一索引
执行建索引SQL:CREATE UNIQUE INDEX idx_uuid_response_id ON 你的表名(uuid, responseId);
建立该索引后,只要新插入数据的uuid与responseId的组合和表中已有记录重复,就会触发唯一键冲突,符合ON DUPLICATE KEY的触发条件。 - 第二步:编写单条插入更新SQL
示例SQL如下,替换对应参数即可直接使用:
INSERT INTO 你的表名 (uuid, responseId, response) VALUES ('实际传入的uuid', '实际传入的responseId', '实际传入的response内容') ON DUPLICATE KEY UPDATE response = VALUES(response);
如果你使用的是MySQL 8.0.20及以上版本,更推荐使用别名写法,避免VALUES()函数被弃用的警告:
INSERT INTO 你的表名 (uuid, responseId, response) VALUES ('实际传入的uuid', '实际传入的responseId', '实际传入的response内容') AS new_row ON DUPLICATE KEY UPDATE response = new_row.response;
该方案全程仅执行一次SQL,原子性有保障,也不会出现并发场景下先查后写的竞态问题。
内容的提问来源于stack exchange,提问作者saltemohn
相关产品推荐
相关产品推荐

