まぁ、動作的にこうなるのは仕方ないんだけど、テーブルの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の仕様。 下手に巻き戻したりすると、平行して実行して先行処理がロールバックすると