ホームページ > データベース > mysql チュートリアル > MySQL の自動インクリメント フィールドのギャップを埋めることはできますか?

MySQL の自動インクリメント フィールドのギャップを埋めることはできますか?

Susan Sarandon
リリース: 2024-11-14 18:01:02
オリジナル
533 人が閲覧しました

Can I Fill Gaps in Auto-Increment Fields in MySQL?

自動増分フィールドのギャップを埋める

質問: 自動増分フィールドのギャップをシームレスに埋める方法はありますか?新しい挿入でフィールドを増分しますか?

回答:

通常、順序付けやセマンティックな意味のために自動増分フィールドに依存することはお勧めできませんが、フィールドを埋めるときに状況が発生することがあります。これらのギャップは望ましい場合があります。このような場合、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート