MySQL Triggers Implementation

摘要:在本教程中,您将了解MySQL 触发器的实现。另外,我们还将向您展示MySQL如何存储触发器以及MySQL中触发器的限制。

MySQL触发器简介

在 MySQL 中,触发器是一组 SQL 语句,当关联表上的数据发生更改时,会自动调用该语句。触发器可以定义为在INSERTUPDATEDELETE语句更改数据之前或之后调用。在 MySQL 5.7.2 版本之前,您可以为每个表最多定义 6 个触发器。

  • BEFORE INSERT – 在数据插入表之前激活。
  • AFTER INSERT – 在数据插入表后激活。
  • BEFORE UPDATE – 在更新表中的数据之前激活。
  • AFTER UPDATE – 在表中的数据更新后激活。
  • BEFORE DELETE – 在从表中删除数据之前激活。
  • AFTER DELETE – 从表中删除数据后激活。

但是,从MySQL版本5.7.2+开始,您可以为同一触发事件和动作时间定义多个触发器

当您使用不使用INSERTDELETEUPDATE语句的语句来更改表中的数据时,不会调用与该表关联的触发器。例如, TRUNCATE语句删除表的所有数据,但不调用与该表关联的触发器。

有一些语句在幕后使用INSERT语句,例如REPLACE 语句LOAD DATA语句。如果使用这些语句,则会调用与该表关联的相应触发器。

您必须为与表关联的每个触发器使用唯一的名称。但是,您可以为不同的表定义相同的触发器名称,尽管这是一个很好的做法。

您应该使用以下命名约定来命名触发器:

(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)Code language: SQL (Structured Query Language) (sql)

例如, before_order_update是在更新order表中的行之前调用的触发器。

下面的命名约定与上面的一样好。

tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)
Code language: SQL (Structured Query Language) (sql)

例如, order_before_update与上面的before_order_update触发器相同。

MySQL 触发器存储

MySQL 将触发器存储在数据目录中,例如/data/classicmodels/ ,其中文件名为tablename.TRGtriggername.TRN

  • tablename.TRG文件将触发器映射到相应的表。
  • triggername.TRN文件包含触发器定义。

您可以通过将触发器文件复制到备份文件夹来备份 MySQL 触发器。您还可以使用mysqldump工具备份触发器

MySQL 触发器限制

MySQL 触发器涵盖了标准 SQL 中定义的所有功能。但是,在您的应用程序中使用它们之前,您应该了解一些限制。

MySQL 触发器不能:

从MySQL 5.1.4版本开始,触发器可以调用存储过程存储函数,这是以前版本的限制。

在本教程中,我们向您展示了如何在 MySQL 中实现触发器。我们还讨论了触发器的存储以及触发器在 MySQL 中的限制。

本教程有帮助吗?