MySQL EXIT HANDLER没有捕捉到所有的错误?

问题描述:

我的MySQL的过程是这样的:我叫这个过程MySQL EXIT HANDLER没有捕捉到所有的错误?

create procedure create_feed (_id int) 
begin 
    declare exit handler for sqlexception 
    begin 
     rollback; 
     select false; 
    end; 

    start transaction; 

    insert into t1(id) 
    values (_id); 

    insert into wrong_table_name (id, createdtime) 
    values (
     _id, 
     CURRENT_TIMESTAMP 
    ); 

    commit; 
    select true; 
end// 

后,t1表进行更新,并在值“真”返回。 wrong_table_name完全不存在。为什么?

+0

你使用的是什么版本的MySQL?你在t1上使用什么存储引擎? – 2011-05-16 20:20:12

+0

它是5.1 ??,不记得最后的数字。我正在使用存储引擎的默认值。 – davidshen84 2011-05-16 23:41:44

如果您希望它返回一个值,我建议您使用函数而不是过程。另一个选择是如果您希望程序返回一个或多个值,则使用输出参数。

尽管如此,我很惊讶你的结果。如果wrong_table_name不存在,那么该proc应该返回true。至于t1正在更新,如果您使用的是像MyISAM这样的非事务性存储引擎,会忽略回滚。

我在MySQL 5.5.8中测试了你的代码,它对我来说工作正常。即,当wrong_table_name不存在时,它总是进入退出处理程序。