2011-08-01 15 views
3

私はデータベース全体のシナリオを初めて知り、学習します。私はデータベースmysqlを持っており、私はフィールドなどを編集するためにphpmyadminを使用しています。私はプライマリとして設定されているauto_incremenet 'id'フィールドを作成しました。 5つのフィールドを追加すると、IDは '1,2,3,4,5'になります。これらのフィールドをすべて削除して5つのフィールドを追加すると、なぜIDは '6,7,8,9,10'になりますか? (技術的に他のフィールドはもはや存在しないので0に戻るのではなく、独自の権利ですか?) IDを順次数値にする方法はありますか? 1,2,3,4,5、データベースからレコードを削除すると、mysql

+2

プライマリキーは一度しか使用できません。したがって、レコードが削除されても、PKは新しいレコードに再割り当てされません。 –

+0

"InUseID"のようなものを追跡する必要がある場合は、別のフィールドが必要になり、プライマリキー "ID"と同じではないことを確認してください。 – Matt

答えて

5

あなたはそれを心配する必要はありません。あなたのプライマリキーは、十分大きな数を保持できる符号なしintでなければなりません。

0

thisをご覧ください。しかし、基本的には:前述のように

ALTER TABLE mytable AUTO_INCREMENT = 1; 

UPDATE

は、自動車をいじることのPKはあなたの原因無限に頭痛の多くを生成します。またはハウスキーピングを行うための定型コードをたくさん書いてください。

+0

ただし、運用環境で自動生成されたPK値を非常にイライラした結果につながります。 – Mchl

1

これは、リレーショナルデータベースシステムを使用すると、行を他の行(通常はそのID)に「リンク」できるためです。 IDの再利用を開始すると、混乱する状況に終わることがあります。

あなたは次のクエリ使用したいものは何でもAUTO_INCREMENTカウンターをリセットすることができます:あなたは、テーブル内のすべての行を削除する場合

ALTER TABLE tableName AUTO_INCREMENT=123 

を、あなたはまた、カウンタをリセットしますTRUNCATEを使用することができます。

TRUNCATE TABLE tableName 
1

私はこの動作の主な理由は効率だと思います。つまり、MySQLは使用されていない番号を追跡する必要はなく、最後に使用された番号のみを知る必要があります。

関連する問題