MySQL EXIT HANDLER没有捕获所有错误?

时间:2011-05-16 10:41:48

标签: mysql stored-procedures

我的MySQL程序如下:

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表,并返回值“true”。 wrong_table_name 根本不存在。为什么呢?

1 个答案:

答案 0 :(得分:0)

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

尽管如此,我对你的结果感到惊讶。如果wrong_table_name不存在,则该proc应该返回true。至于t1正在更新,如果您使用像MyISAM这样忽略回滚的非事务性存储引擎,就会发生这种情况。

我在MySQL 5.5.8中测试了你的代码,它适用于我。也就是说,当wrong_table_name不存在时,它总是进入退出处理程序。