【发布时间】:2017-09-12 11:24:47
【问题描述】:
我有一个调用生成过程的事务,但是如果在该过程之后发生错误,我注意到该过程期间和之前的语句已被提交。流程如下:
DELIMITER $$
CREATE PROCEDURE location_processor(in _city varchar(20), in _country_code varchar(2), out id int)
begin
select location_id into id from location where city = _city and country_code = _country_code limit 0,1;
if id is null then
select @id := max(location_id) from location;
if @id is null then
set @id = 0;
end if;
set @id = @id + 1;
insert into location (location_id, city, country_code)
values(@id, _city, _country_code);
set id = @id;
end if;
end; $$
DELIMITER ;
注意:此过程中没有使用开始/结束事务语法;虽然我有理由相信程序本身的开始和结束导致提交:
注意:
在所有存储程序(存储过程和函数、触发器和事件)中,解析器将 BEGIN [WORK] 视为 BEGIN ... END 块的开始。在此上下文中使用 START TRANSACTION 开始事务。
(https://dev.mysql.com/doc/refman/5.7/en/commit.html)
我需要这个过程来检查错误。有没有办法避免在事务中使用过程时提交?
【问题讨论】:
标签: mysql stored-procedures transactions