私は生成されたプロシージャを呼び出すトランザクションを持っていますが、プロシージャの後でエラーが発生した場合、手順は次のとおりです。MySQL:トランザクション内のプロシージャコールによってコミットが発生します
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)
私は、エラーチェックの目的のために、この手順が必要になります。そこにプロシージャを使用している間にトランザクション内でコミットすることを避けるためにとにかくありますか?