mysql触发器的问题

zhuhuquan29 2009-05-13 11:56:33


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 ;$$
...全文
64 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-05-13
  • 打赏
  • 举报
回复

把name设为主键不就可以了?
zhuhuquan29 2009-05-13
  • 打赏
  • 举报
回复
我直接写我的所有想法吧希望你能帮我解决这个问题哦呵呵..
当我插入

insert into sgb(name,mj,jinjia,sl)
values('',10,10,10);

象这样执行代码的时候就让他判断name里头的值为空的话我就不想让他插进去,
如果有值存在的话就执行行正常... 这样的思路要怎么写触发器
说实话你刚才写的那段代码看不懂嘿嘿..光触发器不行的也可以配合存储或者视图执行的
ACMAIN_CHM 2009-05-13
  • 打赏
  • 举报
回复

一般这种类似CHECK的功能,你应该在 before update /before insert 中实面。

比如表中有主键pkcol int primary key, 已有一个0 ,则下面再设为0会产生2300错误并停止insert / update
if xxxx condition then
set new.pkcol=0;
end if;
zhuhuquan29 2009-05-13
  • 打赏
  • 举报
回复
或者NAME的直不存在的就直接让他不能插进去也可以
zhuhuquan29 2009-05-13
  • 打赏
  • 举报
回复
我的思路是这样的当我插进去的然后我想如果NAME的直存在的话我就执行触发器里头的插入如果直不存在的话我就把刚才插进去的直给删除了...这个思路有可能吗??
ACMAIN_CHM 2009-05-13
  • 打赏
  • 举报
回复

	if new.name='' then
delete from sgb where bh=new.bh;
end if;


没什么好办法,sgb'当前表已经被使用了,不能再 触发器 进行delete了。

zhuhuquan29 2009-05-13
  • 打赏
  • 举报
回复
为什么我在name不差入直的时候报错啊..
错误代码: 1442
Can't update table 'sgb' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
这是什么错误..
ACMAIN_CHM 2009-05-13
  • 打赏
  • 举报
回复

那把name设成unique key
WWWWA 2009-05-13
  • 打赏
  • 举报
回复
在MYSQL的TRIGGER中,不能对本表进行操作

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

参考 REPLACE INTO,可以实现
zhuhuquan29 2009-05-13
  • 打赏
  • 举报
回复
我已经把编号设主见了...

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧