我用mysql
create trigger check_user_version before update on user for each row begin
if old.version < new.version then     //判断不符合条件就抛异常
insert into log values(old.version);
else
insert into log values(1,1);          //这句抛出异常
end if;
end$$因为log表只有一个字段,所以抛出异常,但是我希望直接抛出异常,怎么写?

解决方案 »

  1.   


    o my god
    那么只好问哪种方法性能最好了,插入一个错误的数据?查询一个不存在的表?等等
      

  2.   

    触发器无输出结果的语法,办法不是没有,智能变相实现:
    1.使用SESSION级别的变量,假设名称为 @trigger_return_valecreate trigger check_user_version before update on user for each row 
    BEGIN
    SET @trigger_return_vale=0;
    if old.version < new.version then //判断不符合条件就抛异常
       insert into log values(old.version);
    else
       SET @trigger_return_vale=1; //这句抛出异常
    end if;END$$2.UPDATE执行成功之后,立即再去获取@trigger_return_vale的值,是多少,是1 还是0 就可以判断了
    #****************************************#
    MySQL技术及运维自动化网:www.mysqlops.com新浪微博账号:http://weibo.com/mysqlops
    #****************************************#
      

  3.   

    使用SESSION级别变量的办法,肯定比你INSERT一条记录,再去读取和判断性能上高出N个数量级
    #****************************************#
    MySQL技术及运维自动化网:www.mysqlops.com新浪微博账号:http://weibo.com/mysqlops
    #****************************************#
      

  4.   

    这个要在你调用存储过程的地方处理,用try catch之类的处理异常看你用的是什么语言环境了。