共计 2435 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要讲解了“怎么创建 MySQL 的 TRIGGER 触发器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“怎么创建 MySQL 的 TRIGGER 触发器”吧!
MySQL TRIGGER(触发器)
数据库触发器是数据库中所维护的命名数据库对象,将在修改表中数据时被激活。使用触发器可以提高表中数据的功能和安全性级别。可以使用触发器控制对特定数据的访问权限、执行特定日志记录或对数据本身进行审计。
触发器是在修改表数据时激活的命名数据库对象。它们可以:
Ø
在插入或更新数据之前对数据进行检查并验证删除和更新
Ø
充当数据过滤器,在插入或更新之前修改超出范围的数据
Ø
修改 INSERT、UPDATE
和 DELETE
的行为方式
Ø
对于不支持外键的存储引擎,模仿外键的行为
Ø
提供日志记录功能
Ø
自动创建汇总表
1.1.
创建触发器
CREATE TRIGGER
语句:
CREATE TRIGGER trigger_name
{BEFORE | AFTER}
{INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
triggered_statement
示例:
CREATE TRIGGER City_AD AFTER DELETE
ON City FOR EACH ROW
INSERT INTO DeletedCity (ID, Name) VALUES (OLD.ID, OLD.Name);
trigger_name
是为触发器指定的名称,而 table_name
是要与触发器关联的表的名称。BEFORE
和 AFTER
指示激活触发器的时间(是在触发事件之前或是之后),而 INSERT、UPDATE
或 DELETE
指示具体的事件。
注:表名 OLD
和 NEW
是指触发器可查看的虚拟表。这些表分别包含 UPDATE
或 DELETE 语句所修改的数据的旧版本,或 INSERT
或 UPDATE
语句所添加的数据的新版本。
1.2.
触发器事件
BEFORE
和 AFTER
BEFORE
和 AFTER
关键字是指触发器的激活时间,相对于数据修改语句(INSERT、UPDATE
或 DELETE)将更改写入底层数据库的时间。
BEFORE
关键字可使触发器在涉及的数据修改之前执行。可使用 BEFORE
触发器捕获无效数据条目并在写入表之前对其进行更正或拒绝。
–
BEFORE INSERT:在添加新数据之前触发
–
BEFORE UPDATE:在使用新数据更新(或覆盖)现有数据之前触发
–
BEFORE DELETE:在删除数据之前触发
AFTER
关键字定义在数据修改成功后执行的触发器。可使用 AFTER
触发器记录或审计数据库中的数据修改。
–
AFTER INSERT:在添加新数据之后触发
–
AFTER UPDATE:在使用新数据更新(或覆盖)现有数据之后触发
–
AFTER DELETE:在删除数据之后触发
1.3.
触发器错误处理
MySQL
按如下方式处理触发器执行期间发生的错误:
Ø
BEFORE
触发器失败,则包含相应行操作的事务将回滚。
Ø
AFTER
触发器执行,AFTER 触发器事件和行操作必须成功执行。
Ø
对于非事务表,事务不可用。只有触发了触发器的语句会回滚。
触发器失败后,MySQL
会回滚包含导致触发器触发的语句的事务。
对于非事务表,无法完成此类回滚。因此,虽然语句失败,但在发生错误之前执行的所有更改仍然会生效。
1.4.
检查触发器
SHOW CREATE TRIGGER trigger_name
此语句返回可用于重新创建指定触发器的具体字符串。您必须知道触发器的名称才能运行此语句;对于 SHOW CREATE TRIGGER
语句,不存在 LIKE
或 WHERE
语法。
SHOW TRIGGERS
此语句为 MySQL
扩展。它可返回触发器的特征,如数据库、名称、类型、创建者以及创建和修改日期。此语句有一个优点:可基于 LIKE
模式或 WHERE
子句中提供的条件来显示特定触发器。如果未指定条件,则此语句会显示所有触发器的信息。
INFORMATION_SCHEMA.TRIGGERS:
此语句包含 SHOW
命令所显示的所有数据,能够完整地呈现在所有数据库中可用的触发器。
1.5.
删除触发器
使用如下语法可显式删除触发器:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name;
使用 DROP TRIGGER trigger_name
时,服务器会在当前模式中查找该触发器的名称。如果要删除其他模式中的触发器,请包含模式名称。使用 IF EXISTS
可防止因尝试删除不存在的触发器而出现的错误。通过删除针对其定义触发器的表或者包含触发器的数据库,可隐式删除触发器;
1.6.
对触发器的限制
Ø
不允许使用的语句包括:
l
预处理语句
l
显示或隐式 COMMIT
和 ROLLBACK
l
返回结果集的语句,例如,不包含 INTO var_list
子句的 SELECT
语句
l
FLUSH
语句
l
用于修改要应用触发器的表的语句
l
SHOW
语句
Ø
以下更改不会触发触发器:
l
级联外键所导致的更改
l
在基于行的复制过程中导致的更改
请通过使用 SELECT …INTO var_list,或者通过使用游标和 FETCH
语句的方法在触发器中处理结果集。
1.7.
触发器权限
Ø
要执行 CREATE TRIGGER
和 DROP TRIGGER
命令,需要有 TRIGGER
权限。
Ø
在触发器中使用 OLD
和 NEW 需要的权限:要使用 SET NEW.col_name = value
为列赋值,需要对该列拥有 UPDATE
权限;要在表达式中使用 NEW.col_name
以引用新的列值,需要对该列拥有 SELECT
权限。
感谢各位的阅读,以上就是“怎么创建 MySQL 的 TRIGGER 触发器”的内容了,经过本文的学习后,相信大家对怎么创建 MySQL 的 TRIGGER 触发器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!