- 论坛徽章:
- 1
|
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 ON
data 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就被激活。
在这个触发器中有两个重要的子句: AFTER INSERT子句表明触发器在新记录插入data表格后激活。 UPDATE chars
SET count = count +
CHAR_LENGTH(NEW.name)子句表示触发器激活后执行的SQL命令。在本例中,该命令表明用新插入的data.name域的字符数来更新
chars.count栏。这一信息可通过内置的MySQL函数CHAR_LENGTH()获得。
但是MySql触发器不支持对本表做更新操作。系统禁止你这样做是有道理的,不然的话你update一条记录触发一个触发器,在触发器里又update了一条记录,这个update又会触发触发器,然后又update...这样子就进行死循环了。
这一问题在MySQL论坛上有人讨论,见:
http://forums.mysql.com/read.php?99,122354,122354#msg-122354
暂时还没办法解决。只能考虑修改应用设计
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9817/showart_1008234.html |
|