一个有关mySQL 触发器激活的错误 #1442

 

database:hello  table :yy

+----+------+------+
| Id | sal  | num  |
+----+------+------+
| 13 |  600 |   10 |
| 14 |  200 |   10 |
| 15 |  300 |   10 |
+----+------+------+

写好的MySQL触发器 如下:

CREATE TRIGGER ins_trig before insert ON hello.yy
    FOR EACH ROW
    BEGIN
    update yy set sal=sal+100 where num>10
    END;

这个触发器是可以执行成功的 然后我们测试(激活)

insert into yy values(0,2000,11);

理论上按照触发器的定义插入的值应该为16 2100 11  可是令人郁闷的错误出现了:

ERROR 1442 (HY000): Can't update table 'yy' in stored function/trigger because i
t is already used by statement which invoked this stored function/trigger.

网上找遍了所有的解决办法 最后在国外的一个帖子上找到了solution

将触发器定义改成如下:

CREATE TRIGGER ins_trig before insert ON hello.yy
    FOR EACH ROW
    BEGIN    
    if new.num>10 then    
        set new.sal = new.sal + 100;        
    end if;
    END;

然后插入刚才的测试值就ok了

mysql> insert into yy values(0,2000,11);
Query OK, 1 row affected (0.01 sec)

mysql> select * from yy;
+----+------+------+
| Id | sal  | num  |
+----+------+------+
| 13 |  600 |   10 |
| 14 |  200 |   10 |
| 15 |  300 |   10 |
| 16 | 2100 |   11 |
+----+------+------+
5 rows in set (0.00 sec)

原帖连接为:http://crazytoon.com/2008/03/03/mysql-error-1442-hy000-cant-update-table-t1-in-stored-functiontrigger-because-it-is-already-used-by-statement-which-invoked-this-stored-functiontrigger/

看完了这片文章相信你也有收获吧,那就在帮我个忙 http://www.shb-china.com/huodong/huahu/2010-01-20/1844.html  投票支持下啦

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laker_bbs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值