MySQL触发存储

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

  • tablename.TRG文件将触发器映射到相应的表。

  • triggername.TRN文件包含触发器定义。

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

MySQL触发器的局限性

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

MySQL触发器不能:

  • 使用SHOW,LOAD DATA,LOAD TABLE,BACKUP DATABASE,RESTORE,FLUSH和RETURN语句。

  • 使用隐式或显式提交或回滚的语句,例如COMMIT,ROLLBACK,START TRANSACTION,LOCK / UNLOCK TABLES,ALTER,CREATE,DROP,RENAME。

  • 使用准备好的语句,例如PREPARE和EXECUTE。

  • 使用动态SQL语句。

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

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

MySQL触发器简介

在MySQL中,触发器是一组SQL语句,当对关联表上的数据进行更改时,将自动调用该语句。
可以将触发器定义为在INSERT,UPDATE或DELETE语句更改数据之前或之后调用。
在MySQL 5.7.2版之前,您最多可以为每个表定义六个触发器。

  • 插入前-在将数据插入表中之前激活。

  • 插入后–将数据插入表后激活。

  • 更新前–在更新表中的数据之前激活。

  • 更新后–更新表中的数据后激活。

  • 删除前–在从表中删除数据之前激活。

  • AFTER DELETE –从表中删除数据后激活。

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

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

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

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

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

(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)

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

以下命名约定与上述命名约定一样好。

tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)

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

MySQL触发器实现

简介:在本教程中,您将学习MySQL触发器的实现。
另外,我们将向您展示MySQL如何在MySQL中存储触发器以及触发器的限制。

日期:2019-11-20 08:52:18 来源:oir作者:oir