以下是我正在处理的示例表
表1
╔════╦══════════════╦══════╗
║ KID║ REV ║ REDO ║
╠════╬══════════════╬══════╣
║ 1 ║ 43453453345 ║ 2 ║
║ 1 ║ 2433423423 ║ 1 ║
║ 2 ║ 23423423 ║ 1 ║
║ 2 ║ 5566533 ║ 2 ║
╚════╩══════════════╩══════╝
我需要将 REV , KID 和 REDO 插入表1 ,并在插入时插入 KID 和 REDO 的重复条目我需要更新 REV 。 我尝试使用 ON DUPLICATE KEY UPDATE ,但我有两个不是主要的字段。 如何使用普通的mysql实现这一点?请帮帮我
答案 0 :(得分:1)
您可以创建在插入之前触发的触发器,并检查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查询的结果不为null,则另一种方法是发送信号并中止插入。这意味着插入将创建一个重复的条目。
signal sqlstate '45000' set message_text = 'duplicate insert';