热门关键字:  ubuntu  分区  linux系统进程  函数  Fedora

mysql触发器

来源: 作者: 时间:2008-06-22 Tag: 点击:
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

暂时还没办法解决。只能考虑修改应用设计

最新评论共有 2 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册