我的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 根本不存在。为什么呢?
答案 0 :(得分:0)
如果您希望它返回一个值,我建议您使用函数而不是过程。如果您希望程序返回一个或多个值,则另一个选项是使用out参数。
尽管如此,我对你的结果感到惊讶。如果wrong_table_name
不存在,则该proc应该返回true。至于t1正在更新,如果您使用像MyISAM这样忽略回滚的非事务性存储引擎,就会发生这种情况。
我在MySQL 5.5.8中测试了你的代码,它适用于我。也就是说,当wrong_table_name
不存在时,它总是进入退出处理程序。