Mysql Error 1442

报错信息如下:

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

个人理解是因为在更新读取表A的时候,触发器又要读取表A的数据然后再更新表A。

如下面的代码:

CREATE TRIGGER `updateSelfStatusUpdate` BEFORE UPDATE ON `member` FOR EACH ROW BEGIN

SET @id:=NEW.`id`;
SET @type:=NEW.`type`;
SET @value_new:=NEW.`value`;
SET @value_old:=OLD.`value`;
IF @type=1 THEN 
    IF @value_old>0 AND @value_new=0 THEN
        #UPDATE `member` SET `status`=0 WHERE `id`=@id;
        SET NEW.`status`=0;
    ELSEIF @value_old=0 AND @value_new>0 THEN
        #UPDATE `member` SET `status`=1 WHERE `id`=@id;
        SET NEW.`status`=1;
    END IF;
END IF;

END;

上面注释掉的UPDATE语句就是问题所在,即在表member的更新触发器里使用UPDATE语句更新member表本身。

解决方案是使用

SET NEW.`field`=xxx

这种语句来代替,同样能实现

在更新表A的某个字段Field1的同时按需求更新表A的其他字段Field2、Field3

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值