MySQL 触发器介绍
简介:在本教程中,您将了解MySQL触发器实现。此外,我们将向您展示MySQL如何在MySQL中存储触发器和触发器的限制。
MySQL触发器简介
在MySQL中,触发器是一组SQL语句,当对关联表上的数据进行更改时会自动调用这些语句。可以定义触发器在INSERT,UPDATE或DELETE语句更改数据之前或之后调用。在MySQL 5.7.2版之前,您可以为每个表定义最多六个触发器。BEFORE INSERT
- 在将数据插入表格之前激活。AFTER INSERT
- 将数据插入表格后激活。BEFORE UPDATE
- 在更新表中的数据之前激活。AFTER UPDATE
- 更新表中的数据后激活。BEFORE DELETE
- 在从表中删除数据之前激活。AFTER DELETE
- 从表中删除数据后激活。
INSERT
,DELETE
或UPDATE
语句来修改表中的数据,与表关联的触发器不被调用。例如,TRUNCATE语句删除表的所有数据,但不调用与表关联的触发器。
有一些语句使用INSERT
其它语句,如REPLACE语句 或 LOAD DATA语句。如果使用这些语句,则会调用与表关联的相应触发器。
必须为与表关联的每个触发器使用唯一名称。但是,您可以为不同的表定义相同的触发器名称,但这是一种很好的做法。
您应使用以下命名约定命名触发器:
(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)例如,
before_order_update
是在order
更新表中的行之前调用的触发器。
以下命名约定与上面的命名约定一样好。
tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)例如,
order_before_update
与before_order_update
上面的触发器相同。
MySQL触发存储
MySQL将触发器存储在数据目录中,例如,/data/mysqldemo/
使用名为的文件tablename.TRG
和 triggername.TRN
:
tablename.TRG
文件将触发器映射到相应的表。triggername.TRN
文件包含触发器定义。
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语句。