DELIMITER $$;DROP TRIGGER `my_test`.`cfsgb1`$$create trigger `cfsgb1` AFTER INSERT on `sgb` 
for each row BEGIN
  set @a=new.bh;
  set @d=new.name;
  set @jinjzh=new.jinjia*new.sl;
  set @maijzh=new.mj*new.sl;
if @d<>'' then
  insert into sgb1(bh,name,jinjzongh,maijzongh)
  values(@a,@d,@jinjzh,@maijzh);
end if;
if new.name='' then
delete from sgb where bh=new.bh;
end if;
END;
$$DELIMITER ;$$

解决方案 »

  1.   

    为什么我在name不差入直的时候报错啊..
    错误代码: 1442
    Can't update table 'sgb' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    这是什么错误..
      

  2.   

    if new.name='' then
    delete from sgb where bh=new.bh;
    end if;没什么好办法,sgb'当前表已经被使用了,不能再 触发器 进行delete了。
      

  3.   

    我的思路是这样的当我插进去的然后我想如果NAME的直存在的话我就执行触发器里头的插入如果直不存在的话我就把刚才插进去的直给删除了...这个思路有可能吗??
      

  4.   

    或者NAME的直不存在的就直接让他不能插进去也可以
      

  5.   

    一般这种类似CHECK的功能,你应该在 before update /before insert 中实面。比如表中有主键pkcol int primary key, 已有一个0 ,则下面再设为0会产生2300错误并停止insert / update
    if xxxx condition then
      set new.pkcol=0;
    end if;
      

  6.   

    我直接写我的所有想法吧希望你能帮我解决这个问题哦呵呵.. 
    当我插入insert into sgb(name,mj,jinjia,sl)
    values('',10,10,10);象这样执行代码的时候就让他判断name里头的值为空的话我就不想让他插进去,
    如果有值存在的话就执行行正常... 这样的思路要怎么写触发器
    说实话你刚才写的那段代码看不懂嘿嘿..光触发器不行的也可以配合存储或者视图执行的
      

  7.   

    在MYSQL的TRIGGER中,不能对本表进行操作我的思路是这样的当我插进去的然后我想如果NAME的直存在的话我就执行触发器里头的插入如果直不存在的话我就把刚才插进去的直给删除了...这个思路有可能吗??参考 REPLACE INTO,可以实现