まぁ、動作的にこうなるのは仕方ないんだけど、テーブルのauto_increment値はrollbackしても戻らず増加する。
一般的にテーブルのPKはidで、auto_incrementにすると思うんだけど、InnoDBでトランザクション制御をしているとき
BEGIN;
INSERT INTO main_table(id, code, num) VALUES(0, 1, 2);
UPDATE sub_table SET main_id=LAST_INSERT_ID() WHERE code=1;
ROLLBACK;
とかすると、INSERTもUPDATEも無かったことにされるけど、main_tableのauto_incrementカウンタは増加しているんで、次にINSERTするとidが飛んでしまうのがMySQLの仕様。
下手に巻き戻したりすると、平行して実行して先行処理がロールバックするとカウンタが前後しちゃったりするんでベターな処理ではある。
基本事項だけど一応確認。
(2434)