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 ║
╚════╩══════════════╩══════╝
我需要将 REV、KID 和 REDO 插入 table 1 并且在插入时如果 KID 和 REDO 都有重复的条目,我只需要更新反转。
我尝试使用 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';
下面是我正在处理的示例table
Table 1
╔════╦══════════════╦══════╗
║ KID║ REV ║ REDO ║
╠════╬══════════════╬══════╣
║ 1 ║ 43453453345 ║ 2 ║
║ 1 ║ 2433423423 ║ 1 ║
║ 2 ║ 23423423 ║ 1 ║
║ 2 ║ 5566533 ║ 2 ║
╚════╩══════════════╩══════╝
我需要将 REV、KID 和 REDO 插入 table 1 并且在插入时如果 KID 和 REDO 都有重复的条目,我只需要更新反转。 我尝试使用 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';