連続した自動インクリメント ID の確保
データベース管理において、自動インクリメント フィールドは、レコードごとに一意の識別子を生成する便利な方法を提供します。ただし、挿入や削除などの特定の操作により、これらの ID のシーケンスに「穴」またはギャップが生じる可能性があります。
データベース ユーザーの間でよくある質問の 1 つは、これらの穴を埋めることができるかどうかです。答えは、自動インクリメント フィールドの目的を理解することにあります。
自動インクリメント フィールドは、レコードの順序のインジケーターとしてではなく、主にレコードの識別に使用されます。したがって、通常は連続した ID シーケンスを持つ必要はありません。ギャップはテーブルの整合性や機能には影響しません。
ただし、連続した番号を保持することが重要である特定のケースでは、次のような方法を採用できます。
一時的な値を使用する新しい ID を作成するテーブル
MySQL 3.23 以降を使用している場合は、次のことができます。一時テーブルを利用して、一連の新しい一連の ID を作成します。これには、新しい ID (NewID) 用と古い ID (OldID) 用の 2 つの列を持つ一時テーブルの作成が含まれます。
次のコードを使用して一時テーブルを作成し、それに既存の ID:
これにより、各行が既存の ID と新しい連続 ID をペアにするテーブルが作成されます。次のステップは、これらの新しい ID で実際のテーブルを更新することです。
実際のテーブルと外部キー参照の更新
テーブルを更新するには、以下を行う必要があります。自動インクリメント フィールドと、そのフィールドを使用する外部キー参照の両方を更新します。これには、外部キー制約を一時的に無効にし、更新後に再度有効にすることが含まれる場合があります。
例
次のスキーマを持つ 2 つのテーブル、親テーブルと子テーブルを考えます。
一時テーブルの新しい ID で親テーブルと子テーブルを更新するには、次の SQL ステートメント:
注:
これらの穴を埋めることによって機能的な利点が得られるわけではないことを理解することが重要です。自動インクリメントフィールドは、連続した順序を維持するためではなく、レコードの一意の識別を保証するために存在します。
以上がデータベース内の自動インクリメント ID のギャップを埋めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。