You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:52:03