MySQL 5.7(开启ONLY_FULL_GROUP_BY)多字段匹配插入更新方案咨询
解决MySQL 5.7中组合字段的插入/更新问题
要实现「字段组合无匹配则插入,有匹配则更新」的需求,核心是利用ON DUPLICATE KEY UPDATE的特性——它依赖**唯一键(主键或唯一索引)**来判定记录是否重复。针对你的场景,具体步骤如下:
1. 添加组合唯一索引
由于你需要基于type和uuid_session的组合判断重复,先给这两个字段添加唯一索引,确保组合值唯一:
ALTER TABLE cameraStatus ADD UNIQUE KEY idx_type_uuid_session (type, uuid_session);
若你的匹配组合是其他字段(比如
camera_id+uuid_session),只需修改索引中的字段列表即可。注意:如果字段允许NULL,因NULL不参与相等判断,两条含NULL的组合记录不会被判定为重复。
2. 编写正确的插入/更新语句
修正原伪查询的语法错误,使用标准的ON DUPLICATE KEY UPDATE格式:
INSERT INTO cameraStatus(time, uuid_session, type) VALUES ('2022-12-14 16:01:00', '01234567-8901-2345-6789-012345678901', 'WORK') ON DUPLICATE KEY UPDATE time = VALUES(time), uuid_session = VALUES(uuid_session), type = VALUES(type);
VALUES(字段名)会引用INSERT语句中对应字段的插入值,也可直接写固定值(比如time = '2022-12-14 16:01:00');- 若
id字段是自增主键,插入时无需指定id,MySQL会自动生成;若id不是自增,需确保插入的id不与现有记录冲突。
关于ONLY_FULL_GROUP_BY模式
该模式仅影响GROUP BY查询的语法校验,对INSERT ... ON DUPLICATE KEY UPDATE无影响,无需调整。
内容的提问来源于stack exchange,提问作者IvanNaStackOF
相关产品推荐
相关产品推荐

