我们可以在mysql的单个表上有多个触发器吗?

时间:2013-04-26 04:05:56

标签: mysql triggers

我在MySQL中的单个表上编写了一个插入触发器和插入触发器之后。但是当我放入另一个触发器时,触发器之一自动被替换。如果我在插入触发器之后放置,则插入触发器代码自动被替换。 请注意,它会被删除,或者您可以删除代码。

他们两个分别工作正常。请帮帮我。

3 个答案:

答案 0 :(得分:12)

在MySQL 5.7.2之前

每个表只能有一个触发器并触发事件和操作时间。例如,它可能有

  • 一个BEFORE UPDATE和一个AFTER UPDATE
  • 一个BEFORE UPDATE和一个BEFORE INSERT

触发表格。但是,您可以使用BEGIN ... END来执行多个语句的触发器。有关详细信息,请参阅MySQL 5.6 Documentation

使用MySQL 5.7.2

对每个表的触发器数量没有任何限制。此外,可以使用PRECEDESFOLLOWS关键字定义触发处理的顺序。有关详细信息,请参阅MySQL 5.7 Documentation

答案 1 :(得分:3)

您可以拥有BEFORE INSERT触发器和AFTER INSERT触发器。它位于documentation。您只能拥有其中一个 - 例如,您不能拥有两个(或三个或四个)BEFORE INSERT触发器。

如果您的AFTER INSERT触发器正在消灭BEFORE INSERT触发器,则两个触发器可能具有相同的名称。确保每个都有一个唯一的名称。

答案 2 :(得分:0)

来自 MySQL 8.0 版 Documentation

<块引用>

可以为具有相同触发事件和动作时间的给定表定义多个触发器。例如,您可以为一个表设置两个 BEFORE UPDATE 触发器。默认情况下,具有相同触发事件和动作时间的触发器会按照它们的创建顺序激活。要影响触发器顺序,请指定一个用于指示 FOLLOWS 或 PRECEDES 的 trigger_order 子句以及也具有相同触发器事件和操作时间的现有触发器的名称。使用 FOLLOWS,新触发器在现有触发器之后激活。使用 PRECEDES,新触发器在现有触发器之前激活。