MYSQL 查询更新多个重复字段条目

MYSQL query for updating on multiple duplicate field entry

下面是我正在处理的示例table

Table 1

╔════╦══════════════╦══════╗
║ KID║  REV         ║ REDO ║
╠════╬══════════════╬══════╣
║  1 ║ 43453453345  ║  2   ║
║  1 ║ 2433423423   ║  1   ║
║  2 ║ 23423423     ║  1   ║
║  2 ║ 5566533      ║  2   ║
╚════╩══════════════╩══════╝

我需要将 REVKIDREDO 插入 table 1 并且在插入时如果 KIDREDO 都有重复的条目,我只需要更新反转。 我尝试使用 ON DUPLICATE KEY UPDATE 但我有两个字段在这里不是主要字段。 如何用简单的 mysql 来实现?请帮助我

您可以创建一个在插入之前触发的触发器,并检查 KID 和 REDO id 是否已经存在。如果它们存在,它会执行更新。

触发器可能如下所示:

delimiter //
CREATE TRIGGER upd_check BEFORE INSERT ON table1
FOR EACH ROW
  BEGIN
    SET rev = SELECT REV 
              FROM table1 as t 
              WHERE t.KID = NEW.KID 
              AND t.REDO = NEW.REDO;
    IF rev != NEW.REV THEN
     UPDATE table1
     SET REV = NEW.REV 
     WHERE KID = NEW.KID 
     AND REDO = NEW.REDO;
    END IF;
  END;//
delimiter ;

但是在更新后插入仍然会发生,这就是为什么你应该创建 REDO 和 KID 的唯一索引。因此,如果您插入重复项,则会出现错误,并且触发器仍会更新 REV。

CREATE UNIQUE INDEX unique_table1_idx on table1 (KID, REDO)

如果 SQL 查询的结果不为空,另一种选择是发送信号并中止插入。这意味着插入将创建一个重复条目。

signal sqlstate '45000' set message_text = 'duplicate insert';