gpt4 book ai didi

mysql - 如何避免 MySQL 中的循环触发器依赖

转载 作者:可可西里 更新时间:2023-11-01 07:19:01 25 4
gpt4 key购买 nike

我在 MySQL 中使用触发器时遇到一点问题。

假设我们有 2 个表:

  • 表A
  • 表B

还有 2 个触发器:

  • TriggerA:在 TableA 上删除并更新 TableB 时触发
  • TriggerB:在 TableB 上删除并在 TableA 中删除时触发

问题是当我删除 TableB 中的一些行时,TriggerB 触发并删除 TableA 中的一些元素,然后 TriggerA 触发并尝试更新 TableB。

它失败了,因为 TriggerA 试图更新 TableB 中一些正在被删除的行。

如何避免这种循环依赖?

这两个触发器都不是无用的,所以我不知道我应该怎么做才能解决这个问题。

最佳答案

尝试使用变量。

第一个触发器:

CREATE TRIGGER trigger1
BEFORE DELETE
ON table1
FOR EACH ROW
BEGIN
IF @deleting IS NULL THEN
SET @deleting = 1;
DELETE FROM table2 WHERE id = OLD.id;
SET @deleting = NULL;
END IF;
END

第二个触发器:

CREATE TRIGGER trigger2
BEFORE DELETE
ON table2
FOR EACH ROW
BEGIN
IF @deleting IS NULL THEN
SET @deleting = 1;
DELETE FROM table1 WHERE id = OLD.id;
SET @deleting = NULL;
END IF;
END

还有额外的 AFTER DELETE 触发器:

CREATE TRIGGER trigger3
AFTER DELETE
ON table1
FOR EACH ROW
BEGIN
SET @deleting = NULL;
END

CREATE TRIGGER trigger4
AFTER DELETE
ON table2
FOR EACH ROW
BEGIN
SET @deleting = NULL;
END

关于mysql - 如何避免 MySQL 中的循环触发器依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570204/

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