ロールバックが呼び出された場合、MySQL が行を挿入してから削除するのはなぜですか?
たとえば、次のコードの場合:
declare exit handler for not found rollback;
declare exit handler for sqlwarning rollback;
declare exit handler for sqlexception
BEGIN
select last_insert_id();
rollback;
END;
START TRANSACTION;
INSERT INTO test (text) VALUES ('this_insert_works');
INSERT INTO test (id, text) VALUES (3,'this_insert_fails');
ストア プロシージャの次のコードを実行し、最後の行なしで再度実行すると (動作します)、行が挿入されてから削除されたため、「auto_increment ID がありません」と表示されます。返された選択は、存在しない ID を返します。
どうすればこの動作を回避できますか?