MySQL触发器实现
简介:在本教程中,您将学习MySQL触发器的实现。
另外,我们将向您展示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将触发器存储在数据目录中,例如/ 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中触发器的限制。