假设我有下表,其中PRIMARY_KEY为parent_id, child_id
parent_id | child_id
----------+---------
1 | 2
1 | 3
我想执行一个查询,它会更新行并删除可能的重复项,以便以下查询:
UPDATE IGNORE table SET child_id = 2 WHERE child_id = 3;
会导致:
parent_id | child_id
----------+---------
1 | 2
我需要某种通用解决方案,以便我可以编写复杂的查询来实现这一目标。
答案 0 :(得分:1)
如果MySQL支持在同一个表的触发器内对表进行修改,那么解决方案就会非常优雅。
CREATE TRIGGER prevent_duplicate BEFORE UPDATE ON table FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM table WHERE (parent_id, child_id) = (NEW.parent_id, NEW.child_id) > 0) THEN
DELETE FROM table WHERE (parent_id, child_id) = (OLD.parent_id, OLD.child_id);
END IF;
END;
由于它不支持这样的功能,您可能需要更改应用程序逻辑以实现相同的功能,或者为这些更新创建存储过程。