mysql:13694
From: "Mitsuru Araki" <"Mitsuru Araki" <gunny517@xxxxxxxxxx>>
Date: Thu, 25 Jan 2007 20:37:50 +0900
Subject: [mysql 13694] Re: トランザクション中のオートインクリメント値
久保様 広津様 ご指摘ありがとうございます。 なるほど。使えそうですね。 今までもlast_insert_id()は使っていたのですが、 トランザクションをかけていないケースだったので・・・・ > ですので、Rollback した場合、そのトランザクション中で自動生成 > された値は、Rollback 後の自動生成値としては再使用されず欠番となります。 なるほど。 これはMS Accessでオートナンバーと呼ばれている設定 (要するにオートインクリメントですね)をされたカラムに 入力を始めた場合、途中で中止してもそのとき入力しようとした レコードのオートインクリメント値が欠番になるのと同じ原理ですね。 スッキリしました。 安心して使ってみます。 ありがとうございました。 07/01/22 に T.Hirotsu<hirotsu@xxxxxxxxxx> さんは書きました: > こんにちは、広津です。 > エンジンは InnoDB と仮定します。 > Ver. 4.0, 4.1, 5.0 で私もそのようにして使っています。 > > select LAST_INSERT_ID() は、トランザクション分離レベルや、 > トランザクションブロックの内外に関わらず、Connection ごとに、 > 最後に自動生成された AUTO_INCREMENT カラム値を返すようです。 > > 「最後に自動生成された」とは、「トランザクションが最終的に > Commit か Rollback かは関係なく、とりあえず Insert に成功した」 > ということかと。 > > ですので、Rollback した場合、そのトランザクション中で自動生成 > された値は、Rollback 後の自動生成値としては再使用されず欠番となります。 > > (でないと、逆に使えないですよね、、、(^^;) > > >
13681 2007-01-22 00:00 ["Mitsuru Araki" <gun] トランザクション中のオートインクリメント値 13682 2007-01-22 01:03 ┣[kubo <jazzflute@xxxx] 13683 2007-01-22 10:42 ┗["T.Hirotsu" <hirotsu] -> 13694 2007-01-25 20:37 ┗["Mitsuru Araki" <gun]