我最近在MySQL中设计了我的第一个关系数据库,使用InnoDB作为我所有表的引擎。我想知道当你有多对一的关系时如何正确处理DELETE
和UPDATE
操作。
示例
假设您有以下表格:
T1
PK t1_ID
FK t2_ID
甲
T2
PK t2_ID
FK t3_ID
FK t4_ID
T3
PK t3_ID
乙
T4
PK t4_ID
ç
使用这些表,为t1
中的FK和t2
中的两个FK指定了删除操作的级联。如果从t3
或t4
删除了一个或多个记录,则t2
和t1
中的相应记录也会被删除。
问题
我需要的删除功能是相反的。我希望发生以下情况:
t1
t2
t3
中的相应记录未在其他地方使用,即t3_ID
不在t2
中的任何其他位置,请删除t3
t4
我还需要类似的更新操作功能。
t3
/ t4
中的记录在t2
中没有其他条目,则
价值可以简单地改变。t3
/ t4
中的记录在t2中至少有一个其他记录,
需要在t3
/ t4
和参考中创建新记录
t2
需要更新。我怎样才能做到这一点?
答案 0 :(得分:3)
要传播删除,您可以执行以下操作:
CREATE TRIGGER delete_unused_t2 AFTER DELETE on t1
FOR EACH ROW
BEGIN
IF old.t2_ID NOT IN (SELECT t2_ID FROM t1)
THEN BEGIN
DELETE FROM t2
WHERE t2.t2_ID = old.t2_ID;
END;
END IF;
END
如果你想定期而不是在触发器中做,你可以这样做:
DELETE FROM t2
LEFT JOIN t1 USING (t2_ID)
WHERE t1_ID IS NULL