2011-07-12 28 views
1

に私はテーブルを作成し、いくつかのこと、このような自動インクリメントのフィールド設定:自動インクリメント問題は、MySQL

CREATE TABLE t1(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = MyISAM AUTO_INCREMENT = 123456; 

をしかし、いくつかの理由に私は、テーブル内の行の一部を削除しました。

今質問は、テーブルに新しい行を挿入するときに、新しいIDを割り当てるのではなく、削除された行のIDを割り当てるべきです。

私は私がこれをどのように操作を行うことができ、すべてのIDの

をリセットしたくありません?

ヘルプは言って:)

+0

を使用します

ALTER TABLE t1 AUTO_INCREMENT=1 

を使用することができます。非線形IDに問題はないはずですか? – Nanne

+0

ごめんなさい。私は以前は言及していませんでした。私はリセットしたくありません。 –

+0

待ってください。自動増分フィールドがあります。それはキャップを開始する。あなたはそれをより低い数字で続けたいと思っています。それをリセットしたくないのですか?あなたが再設定することを心配してください。 0にリセットしないでください。 .... – Nanne

答えて

7

は申し訳ありませんが感謝、しかし、あなたは、あなたがあなた自身のトリガー関数を記述しなければならない再利用のidをしたい、これが一般的に考えられてやっている場合、それはAUTO_INCREMENT.の使用ではありません悪い習慣。

あなたがid 50,000であり、id 1のエントリを削除したとします。本当に次のレコードを追加してid 1を再利用したいですか?

2

これを行うには、MySQLに依存するよりも、手動で行う必要があります。 AUTO-INCREMENTフラグは、挿入ステートメントごとにインクリメントされ、後続の挿入のPKとして割り当てられる整数を保持します。この値を使用されていない最小の整数にリセットする更新トリガーを書いていない限り、これをサーバー側のスクリプト言語で処理することをお勧めします。

いずれにしても、なぜ自動インクリメント値を使用するのが問題なのですか?

3

AUTO_INCREMENTの全体のポイントは、自動インクリメントにある...

あなたは明示的にかかわらず、これらのIDを割り当てることができますし、MySQLはそれをできるようになります。

0

自動インクリメント値をリセットするには、あなたは次の挿入されたレコードは、あなたが自動インクリメント番号をリセットすることができますが、あなたが本当にする必要はありませんID 1.

+0

実際には、次のIDは(テーブル内の最大ID)+ 1です。 –

+0

いいえ。「AUTO_INCREMENT」を設定する目的は、次の生成値を変更することです。 –

+0

あなたはもちろん、目的については正しいです。しかし、私のコメントは、実際に何が起こるかについてのコメントでした。 "ALTER TABLE t1 AUTO_INCREMENT = 1"と記述した文は、auto_incrementカウンタを1にのみリセットし、テーブルが空の場合にのみリセットします。テーブルに何らかのレコードがある場合(元の質問の場合)、ステートメントを実行した後、カウンタはMyISAMなら{{テーブルの最大ID} + 1}に設定されます。 InnoDBの場合、auto_incrementの値は変更されません。公式のドキュメントを参照してください:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html –

関連する問題