Mysql 怎么 在 触发器  中 抛出异常和取消操作CREATE TRIGGER `test_before_ins_tr` BEFORE INSERT ON `test`
  FOR EACH ROW
BEGIN
set  @i= new.i;IF @i> 30 THEN
 -- 在这里抛出异常和取消 insert 操作 
end if;END;
请问如何实现 ????

解决方案 »

  1.   

    -- 在这里抛出异常和取消 insert 操作 这个直接用SELECT 语句,比如说:
    select 'Error';
      

  2.   

    to:yueliangdao0608 不行啊,用 select 'Error'; 不行啊, mysql 5.0.24 提示在触发器中不能用 select 语句
      

  3.   

    确实不行,这是MYSQL的存储过程十分不完善的地方我也找了很久,后来想了了个巧妙的方法
    IF @i> 30 THEN
     -- 在这里抛出异常和取消 insert 操作 
      SELECT E001 INTO M_ERRMSG;
    end if
    ;1. MYSQL没有抛出异常的语句,MYSQL已经承认此语句为SIGNAL,目前还没封装.
    2. 所以目前能做的是, 要在抛出异常的地方,插入一个错误语句
    3. 这个错误语句只能是运行期错误语句,否则编译无法通过
    4. 用SELELCT E001 INTO M_ERRMSG, 其中E001可以随便定义为一个不存在字段或函数, 因为这个错误是运行期错误,编译是可以通过的. 后面的INTO M_ERRMSG实际上没有什么用处, 因为SELECT 后面必须加INTO一个变量,否则编译也是不可以通过.