gpt4 book ai didi

mysql - 如何正确处理 RDBMS 中的更新/删除操作?

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

我最近在 MySQL 中设计了我的第一个关系数据库,使用 InnoDB 作为我所有表的引擎。我想知道如何在存在多对一关系时正确处理 DELETEUPDATE 操作。

示例

假设您有以下表格:

t1
PK t1_ID
FK t2_ID
一个

t2
PK t2_ID
FK t3_ID
FK t4_ID

t3
PK t3_ID
B

t4
PK t4_ID
C

对于这些表,为 t1 中的 FK 和 t2 中的两个 FK 指定了级联删除操作。如果从 t3t4 中删除一条或多条记录,则 t2t1 中的相应记录也将被删除。

问题

我需要的删除功能正好相反。我希望发生以下情况:

  1. 删除t1中的一条记录
  2. 删除t2中的对应记录
  3. 如果 t3 中的相应记录未在其他任何地方使用,即 t3_ID 不在 t2 中的其他任何地方,则删除相应的记录在 t3
  4. t4 重复第 3 步

我还需要类似的更新操作功能。

  1. 如果 t3/t4 中的记录在 t2 中没有其他条目,则可以简单地更改值。
  2. 如果 t3/t4 中的记录在 t2 中至少有一个其他记录,则需要在 t3/t4 中创建新记录,并在t2 需要更新。

我怎样才能做到这一点?

最佳答案

要传播删除,您可以这样做:

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

关于mysql - 如何正确处理 RDBMS 中的更新/删除操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20850013/

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