免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1554 | 回复: 0
打印 上一主题 下一主题

mysql触发器 [复制链接]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-22 19:08 |只看该作者 |倒序浏览
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP