开发者社区 问答 正文

MySQL触发器问题,高手们进来看看~??报错

#插入分类时的更新 pid path child childids的操作
DELIMITER &&
CREATE TRIGGER tg1
BEFORE INSERT
ON kwx_category
FOR EACH ROW
  BEGIN
    IF (NEW.pid<>0) #插入的分类不是顶级分类
    THEN #子分类
      #更新当前分类
      SET NEW.path=CONCAT((
                            SELECT
                              path
                            FROM kwx_category
                            WHERE id=NEW.pid),',', NEW.pid), NEW.module=(
        SELECT
          kwx_module.title
        FROM kwx_module
        WHERE id=NEW.moduleid);
      #出现错误的位置begin======================================
      UPDATE kwx_category #出现错误!!!!
      SET child=1, childids=CONCAT(childids,',', NEW.id)
      WHERE id=NEW.pid;
      #出现错误的位置end======================================
    ELSE #顶级分类
      #更新当前分类
      SET NEW.path=NEW.id, NEW.module=(
        SELECT
          kwx_module.title
        FROM kwx_module
        WHERE id=NEW.moduleid);
    END IF;
  END
&&
DELIMITER ;

执行SQL语句出现错误 说不能更新~

这是为什么呢?

数据库结构:

'Can't update table 'kwx_category' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.'报错语句~


展开
收起
爱吃鱼的程序员 2020-06-22 13:15:44 508 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    <spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.65625px;background-color:#F8F8F8;">childids是字符类型吗?是的先别走哈你看下数据库结构我修改下问题

    把你得update语句去掉换成set设值就可以了 

    已经有错误提示了.解发器不能访问当前表的rightanswer你的触发器是 BEFORE INSERT,在这里还不会产生NEW.id吧?试下改成AFTERINSERT。

    2020-06-22 13:16:01
    赞同 展开评论