7

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

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

4

3 回答 3

17

MySQL 5.7.2 之前

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

  • BEFORE UPDATE加一AFTER UPDATE
  • BEFORE UPDATE和一BEFORE INSERT

在桌子上触发。但是你可以通过 using 来拥有执行多个语句的触发器BEGIN ... END。有关更多信息,请参阅MySQL 5.6 文档

使用 MySQL 5.7.2

There are no restrictions about the number of triggers per table any more. It's moreover possible to define the order of trigger processing with the PRECEDES and FOLLOWS keywords. See MySQL 5.7 Documentation for more information.

于 2015-06-30T13:03:46.820 回答
7

注意:这个答案的前半部分适用于 v5.7.2 之前的 MySQL。请参阅以下来自@steffen 的 v5.7.2 及更高版本的答案。后半部分仍然有效:OP 在尝试实现多个触发器时使用了相同的名称。


你可以有一个BEFORE INSERT触发器和一个AFTER INSERT触发器。它在文档中。您只能有一个 - 例如,您不能有两个(或三个或四个)BEFORE INSERT触发器。

如果您的AFTER INSERT触发器正在清除您的BEFORE INSERT触发器,那么这两个触发器可能具有相同的名称。确保每个都有一个唯一的名称。

于 2013-04-26T04:12:01.293 回答
1

From the MySQL Version 8.0 Documentation

It is possible to define multiple triggers for a given table that have the same trigger event and action time. For example, you can have two BEFORE UPDATE triggers for a table. By default, triggers that have the same trigger event and action time activate in the order they were created. To affect trigger order, specify a trigger_order clause that indicates FOLLOWS or PRECEDES and the name of an existing trigger that also has the same trigger event and action time. With FOLLOWS, the new trigger activates after the existing trigger. With PRECEDES, the new trigger activates before the existing trigger.

于 2021-02-16T17:01:01.330 回答