MySQL:触发器

创建触发器

所谓触发器,就是在某一个操作发生时,我希望有某些语句会随之自动执行,就可以使用这个功能。触发器将会对 DELETEINSERTUPDATE 语句做出响应,执行另一个操作。当创建触发器时,要保证每个数据库中的触发器名是唯一的,虽然不同的表允许拥有同名的触发器,但是这种习惯还是要养成。创建时需要给出以下信息:

  1. 触发器名;
  2. 触发器关联的表;
  3. 触发器响应的语句;
  4. 触发器执行的时机。

要创建触发器,就使用 CREATE TRIGGER 语句来光剑,如果要删除就使用 DROP TRIGGER 语句。由于每个表每个事件每次只允许一个触发器,因此每个表只能支持 DELETE、INSERT、UPDATE 3 种语句的 BEFORE 和 AFTER 2 种一共 6 个触发器。一般来说 BEFORE 型用于数据验证和净化,保证插入的是所需的数据。
不过 MySQL 5+ 的触发器总体功能较弱,不支持 CALL 语句,即不能够封装入存储过程。同时触发器的创建需要安全权限,不过使用却需要,因为是自动进行的,这也就说明了这个操作是透明的,且与客户机无关。触发器的一个应用就是进行审计跟踪,能够知晓数据的变化。

INSERT 触发器

INSERT 触发器会在 INSERT 语句执行前或执行后被启动,在触发器的代码内可以引用一个 NEW 虚拟表,访问被插入的行。对于设置为自动增量的列,虚拟表可以在操作之前包含一个 0,然后操作时自动增量也会被自动执行。

在这里,每当 INSERT 语句被执行,就会将一个字符串注入到一个变量中。

所以在没做 INSERT 操作时,这个变量为 NULL。

执行一次任意 INSERT 操作,变量的值被修改。

DELETE 触发器

DELETE 触发器内可以引用一个 OLD 虚拟表,访问被删除的行,表中的值都是只读的。这个触发器就可以吧 OLD 保存的被删除数据添加到一个新的表中。

UPDATE 触发器

UPDATE 触发器内可以引用一个 OLD 虚拟表,访问被修改前的行,引用一个 NEW 虚拟表访问被更新的行。在 BEFORE UPDATE 触发器中 NEW 的值可能被更新。

参考资料

《MySQL Crash Course》[英] Ben Forta 著,刘晓霞 钟鸣 译,人民邮电出版社

posted @ 2021-04-25 10:34  乌漆WhiteMoon  阅读(141)  评论(0编辑  收藏  举报