当前位置: 首页 > 面试题库 >

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

东方新霁
2023-03-14
问题内容

我在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


 类似资料:
  • 问题内容: 我尝试使用MVP范例构建Webapp。因为我希望API干净并且使所有内容易于测试,所以我尝试通过Contructor Injection注入所有可能的内容。现在,我到了一个具有多个文本字段的视图。当数据库中有值时,演示者将填充这些文本字段,因此我的演示者需要视图的引用,但是vie显然也需要演示者的引用。CDI告诉我,由于循环依赖性,无法将Presenter注入视图。是否有可能避免通过s

  • 问题内容: 我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。 有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。 更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需

  • 考虑这两个模块(在同一个文件夹中): 首先是人。派克 然后pet.py 上面的代码将无法工作,因为循环依赖。你会得到一个错误: 让它工作的一些方法: 将类Person和Pet的定义保存在同一个文件中 e、 g.只要有: 到目前为止,我在列出的所有选项中看到了一些缺点。 还有别的办法吗?一个允许我 将类拆分为不同的文件 或者:有没有很好的理由去遵循我已经列出的解决方案之一?

  • 如果我正在创建一个带有如下头文件的静态库: 在我自己的项目中,我可以告诉编译器(在我的例子中是Visual Studio)在哪里查找SomeHeaderFile.h。但是,我不希望我的用户关心这一点--他们应该能够包含我的头,而不必通知编译器SomeHeaderFile.h的位置。 这类情况通常如何处理?

  • 问题内容: 我正在将Java项目从Ant迁移到Gradle。我认为最好的解决方案是使用Gradle的多项目支持,但是我找不到摆脱循环依赖的方法。 原始项目已设置为具有以下布局: 之间的关系,并且,是棘手的。将取决于或根据配置文件。同样,无论配置属性如何,都依赖和。并且永远不会在同一时间建造。 我认为一种快速的解决方案是在: 接下来,我想过要找到一种方法来使之更接近公正工作。这导致我想到了这一点:

  • 问题内容: 我有两个文件和,分别定义了两个类和。 直到今天,用于引用该对象的定义,因此我已经做了 在文件中。 但是,到目前为止,我已经为引用该对象的对象创建了一个新方法。 尝试导入时遇到了问题:我尝试了一下,当程序运行并调用了using的方法时,出现了一个未定义的异常。 我该怎么办? 问题答案: 导入Python模块 是一篇很棒的文章,介绍了Python中的循环导入。 解决此问题的最简单方法是将路