mysql CREATE TABLE data (name VARCHAR(255));Query OK, 0 rows affected (0.09 sec)mysql CREATE TABLE chars (count INT(10));Query OK, 0 rows affected (0.07 sec)mysql INSERT INTO chars (count) VALUES (0);Query OK, 1 row affected (0.00 sec)mysql CREATE TRIGGER t1 AFTER INSERT ONdata FOR EACH ROW UPDATE chars SET count = count + CHAR_LENGTH(NEW.name);Query OK, 0 rows affected (0.01 sec)
理解上面代码的关键在于CREATE TRIGGER命令,它被用来定义一个新触发器。这个命令建立一个新触发器,假定的名称为t1,每次有一个新记录插入到data表格中时,t1就被激活。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/mysql/)在这个触发器中有两个重要的子句:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/mysql/)AFTER INSERT子句表明触发器在新记录插入data表格后激活。
UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)子句表示触发器激活后执行的SQL命令。在本例中,该命令表明用新插入的data.name域的字符数来更新chars.count栏。这一信息可通过内置的MySQL函数CHAR_LENGTH()获得。
放在源表格域名前面的NEW关键字也值得注意。这个关键字表明触发器应考虑域的new值(也就是说,刚被插入到域中的值)。MySQL还支持相应的OLD前缀,可用它来指域以前的值。
你可以通过调用SHOW TRIGGER命令来检查触发器是否被激活,如列表B所示。
mysql SHOW TRIGGERSG*************************** 1. row ******************?Trigger: t1?Event: INSERT?Table: dataStatement: UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)Timing: AFTER?Created: NULLql_mode:1 row in set (0.01 sec)
激活触发器后,开始对它进行测试。试着在data表格中插入几个记录:
mysql INSERT INTO data (name) VALUES ('Sue'), ('Jane');Query OK, 2 rows affected (0.00 sec)Records: 2?Duplicates: 0?Warnings: 0
然后检查chars表格看触发器是否完成它该完成的任务:
猜你喜欢