本人sql新手,请问一下,为什么我以下这段代码执行不成功?
delimiter ||   
drop trigger if exists deletecomment||   
create trigger deletecomment after insert on borrow for each row   
begin
SET @result  = (select `reader-id` from `loss-reporting` where
`loss-reporting`.`reader-id` = new.`reader-id`);
if (new.`reader-id` = @result) THEN
    rollback
end if  
end;||   
delimiter ;我想实现的触发器功能是在往borrow里插入一条记录后,检测reader-id是否存在于loss-reporting这个表中,如果存在就回滚,撤销刚才在borrow里的插入,执行时navicat提示我
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end if;  
end'请教各位高人,这种修改本表的触发器该如何写?mysql触发器rollback

解决方案 »

  1.   

    有专门的mysql专区,我帮你转过去吧
      

  2.   

    create trigger deletecomment after insert on borrow for each row   
    begin
    SET @result  = (select `reader-id` from `loss-reporting` where
    `loss-reporting`.`reader-id` = new.`reader-id`);
    if (new.`reader-id` = @result) THEN
        rollback;
    end if ; 
    end;
      

  3.   

    你这需求直接用ignore into语句代替insert into啊  用不着触发器
      

  4.   

    http://blog.csdn.net/acmain_chm/article/details/4380183
     MySQL 中如何在触发器里中断记录的插入或更新?
    MySQL 不象其它有些数据库可以在触发器中抛出异常来中断当然触发器的执行以阻止相应的SQL语句的执行。在MySQL的目录版本中还无法直接抛出异常。这样我们如何实现呢? 下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。 mysql> create table t_control(id int primary key);Query OK, 0 row...
      

  5.   


    谢谢啦,这个办法好,学习了,不过mysql在完整性这块有点略缺力的感觉,不能抛异常来中断当前触发器的执行,也不支持check约束。。让我有点小郁闷。。
      

  6.   

    if (new.`reader-id` = @result) THEN
         rollback;
     end if  
    少个引号