gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:09:05 25 4
gpt4 key购买 nike

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

表1

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

我需要将REVKIDREDO插入到表1中,并且在插入时是否有KIDREDO 都有重复条目,我只需更新 REV。 我尝试使用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';

关于用于更新多个重复字段条目的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30997421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com