MySQL插入新记录时按PERSON_ID和DOC_TYPE匹配更新旧记录问题
解决方案
第一步:添加组合唯一索引
要让ON DUPLICATE KEY能识别PERSON_ID和DOC_TYPE的重复,需要先给这两个字段添加组合唯一约束:
ALTER TABLE documents ADD UNIQUE KEY idx_person_doc (PERSON_ID, DOC_TYPE);
第二步:修正INSERT语句
你的原语句存在两个问题:一是字段名写错(表中是DOC_INVALIDITY_ID,你写成了DOC_INVALIDITY);二是没有针对需求设置正确的更新字段。修正后的语句如下:
INSERT INTO documents (ID, PERSON_ID, DOC_TYPE, DOC_INVALIDITY_ID, DOC_INVALIDITY_DATE, ACTUAL) VALUES (5, 100, 1, 0, NULL, 1) ON DUPLICATE KEY UPDATE DOC_INVALIDITY_ID = 1, DOC_INVALIDITY_DATE = CURDATE(), ACTUAL = 0;
说明
- 当插入的
PERSON_ID和DOC_TYPE与已有记录重复时,会触发ON DUPLICATE KEY逻辑,将旧记录的DOC_INVALIDITY_ID设为1、DOC_INVALIDITY_DATE设为当前日期、ACTUAL设为0; - 若不存在重复的
PERSON_ID+DOC_TYPE组合,则正常插入新记录; - 注意
ID字段需要保证唯一性,避免插入时主键冲突。
内容的提问来源于stack exchange,提问作者Yerasyl Usen
相关产品推荐
相关产品推荐

