データベース内の自動インクリメントフィールドのギャップを埋める必要がありますか?
Nov 18, 2024 pm 10:59 PM自動インクリメント フィールドのギャップの修正: 詳細な説明
自動インクリメント フィールドは、データベース内のレコードの一意の識別子を生成するために使用されます。テーブル。ただし、時間の経過とともに挿入および削除操作が行われるため、これらの識別子のシーケンスにギャップが発生する可能性があります。
ギャップの無意味な性質
注意することが重要です。自動インクリメントフィールドのギャップは通常は意味がありません。これらは論理的な目的を持たないため、データの整理や参照に依存すべきではありません。自動インクリメント フィールドの主な目的は、特定の順序や順序を維持することではなく、各レコードに一意の参照を提供することです。
ギャップを埋める
これらのギャップを埋めるのは直観的であるように思えるかもしれませんが、いくつかの理由から通常は推奨されません:
- ギャップは無意味であり、データの整合性や使いやすさには影響しません。
- 試行ギャップを埋めると、データベースにエラーや不整合が生じる可能性があります。
それでも、必要な場合...
どうしても埋める必要がある場合は、ギャップがある場合は、特定の状況で実行できます。次の手順で詳細な説明を示します。
- 一時テーブルの作成: 自動インクリメント列を使用して、既存の ID を新しい連続 ID にマップする一時テーブルを作成します。
- 古い ID を挿入: 元のテーブルの古い ID を昇順で一時テーブルに入力します。
- 外部キー制約を削除: 外部キー制約を一時的に無効にします更新中のデータ破損を防ぐために、古い ID を参照する外部キー制約。
- 参照の更新: 元のテーブルおよび関連テーブル内の古い ID へのすべての参照を、新しい ID で更新します。一時テーブル。
- 制約を再度有効にする: すべての参照が更新されたら、参照整合性を維持するために外部キー制約を再度有効にします。
- Drop Temporaryテーブル: 一時テーブルを削除してリソースをクリーンアップします。
参照の更新の例
親テーブルと子テーブルがあると仮定します。次のスキーマを使用します:
CREATE TABLE Parent ( ParentId INT UNSIGNED AUTO_INCREMENT, Value INT UNSIGNED, PRIMARY KEY (ParentId) ); CREATE TABLE Child ( ChildId INT UNSIGNED AUTO_INCREMENT, ParentId INT UNSIGNED, PRIMARY KEY (ChildId), FOREIGN KEY (ParentId) REFERENCES Parent (ParentId) );
参照を更新するには、次の手順に従います:
-
古い親 ID を新しい ID にマッピングする一時テーブルを作成します:
CREATE TEMPORARY TABLE NewIDs ( Id INT UNSIGNED AUTO_INCREMENT, ParentId INT UNSIGNED ); INSERT INTO NewIDs (ParentId) SELECT ParentId FROM Parent ORDER BY ParentId ASC;
ログイン後にコピー -
外部キーのチェックを無効にする:
SET foreign_key_checks = 0;
ログイン後にコピー -
新しい ID で親テーブルと子テーブルを更新する:
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;
ログイン後にコピー
次のようにします手順に従って、親参照と子の参照を更新して、一時テーブルで生成された新しい順序付けされた ID を反映できます。
以上がデータベース内の自動インクリメントフィールドのギャップを埋める必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?
