2009年7月 1日

[mysql 14941] Re: auto_increment属性について

岡田様

サンの奥野です。

On 01/07/2009, at 11:49 AM, Takayuki Okada wrote:
> その後、仕様上は、単一のユニークでないといけないとのことから、
> 構成を見直したうえ、いろいろと検証をやってみましたが、
> 下記の手順できれいな連番にならなくて困ってます。

>
> 1.csvファイル14087件をload
> 2.auto_incrementカラムのmax値は、14087
> 3.続いて、1件をinsert
> 4.auto_incrementカラムのmax値は、16384★
> 5.続いて、1件をinsert
> 6.auto_incrementカラムのmax値は、16385
>
> 4.で、なぜ、こんなにも飛んでしまうのでしょうか?


2通りの可能性が考えられます。

1. DELETE文でテーブルを空にした。

LOADする前にテーブルをDELETE文で空にされてませんでしょうか?
DELETE文などで行を削除した場合、AUTO_INCREMENTカウンタの値が
残ってしまいます。AUTO_INCREMENTカウンタの値を初期値(1)にするには
TRUNCATEする必要があります。

この状態ではAUTO_INCREMENTカウンタの値が大きいのですが、明示的に値を指定すれば
AUTO_INCREMENTカウンタより小さい値でもINSERTすることが可能です。
LOADはCSVファイルから行われたということなので、AUTO_INCREMENTカラムの値も
書かれていたのではないでしょうか。

この後、明示的に値を指定しないでINSERTすると、AUTO_INCREMENTカウンタが
利用されます。

2. CREATE TABLE tbl LIKE orig_tblでテーブルを作成した。

元のテーブルからAUTO_INCREMENTカウンタの値も拾ってきますのでご注意下さい。


今後の検証においては、現在のAUTO_INCREMENTカウンタ値を調べて頂くのが良いと思います。
「SHOW CREATE TABLE テーブル名」または「SHOW TABLE STATUS」コマンドで
AUTO_INCREMENTカウンタ値を表示することができます。

また、もしAUTO_INCREMENT値が意図したものと異なっていた場合には、TRUNCATEで
リセットするか、ALTER TABLEで変更が可能です。

mysql> TRUNCATE テーブル名;

or

mysql> ALTER TABLE テーブル名 AUTO_INCREMENT=1;

ではでは。
--
Mikiya Okuno, MySQL Support Engineer
Sun Microsystems KK, Tokyo, Japan
http://www-jp.mysql.com/

投稿者 xml-rpc : 2009年7月 1日 14:39
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86303
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。