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完全不存在。为什么?
答
如果您希望它返回一个值,我建议您使用函数而不是过程。另一个选择是如果您希望程序返回一个或多个值,则使用输出参数。
尽管如此,我很惊讶你的结果。如果wrong_table_name
不存在,那么该proc应该返回true。至于t1正在更新,如果您使用的是像MyISAM这样的非事务性存储引擎,会忽略回滚。
我在MySQL 5.5.8中测试了你的代码,它对我来说工作正常。即,当wrong_table_name
不存在时,它总是进入退出处理程序。
你使用的是什么版本的MySQL?你在t1上使用什么存储引擎? – 2011-05-16 20:20:12
它是5.1 ??,不记得最后的数字。我正在使用存储引擎的默认值。 – davidshen84 2011-05-16 23:41:44