自動増分フィールドのギャップを埋める
質問: 自動増分フィールドのギャップをシームレスに埋める方法はありますか?新しい挿入でフィールドを増分しますか?
回答:
通常、順序付けやセマンティックな意味のために自動増分フィールドに依存することはお勧めできませんが、フィールドを埋めるときに状況が発生することがあります。これらのギャップは望ましい場合があります。このような場合、MySQL 機能を利用して一連の新しい一連の ID を作成できます。
CREATE TEMPORARY TABLE NewID (NewID INT UNSIGNED AUTO INCREMENT、OldID INT UNSIGNED) を使用して一時テーブルを作成し、既存の ID をすべて挿入します。昇順:
INSERT INTO NewIDs (OldID) SELECT Id FROM OldTable ORDER BY Id ASC
これにより、古い ID と新しい ID の間のマッピングが作成されます。
他のテーブルの参照を更新するには、外部キー制約を無効にします:
SET foreign_key_checks = 0;
次に、親テーブルと子テーブルを更新します:
UPDATE Parent, Child, NewIds SET Parent.ParentId = NewIds.Id, Child.ParentId = NewIds.Id WHERE Parent.ParentId = NewIds.ParentId AND Child.ParentId = NewIds.ParentId
最後に、外部キー チェックを再度有効にします:
SET foreign_key_checks = 1;
クリーンアップのために一時テーブルを削除します:
DROP TABLE NewIds
自動インクリメント フィールドの変更は参照整合性とパフォーマンスに影響を与える可能性があるため、このプロセスは注意して使用する必要があることに注意することが重要です。
以上がMySQL の自動インクリメント フィールドのギャップを埋めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。