MySQL の ALTER ステートメントを使用すると、一意のキーの追加など、テーブル定義を変更できます。 IGNORE キーワード拡張機能を使用すると、この操作中に重複行を削除できます。ただし、IGNORE を使用している場合でも「整合性制約違反」エラーが発生することがユーザーから報告されています。
問題:
一意のキーに基づいて重複を削除する ALTER IGNORE TABLE ステートメントを実行すると、 「整合性制約違反」エラーが依然として発生しており、IGNORE によってこのエラーが防止されるというドキュメントの主張と矛盾しています。
原因:
IGNORE キーワード拡張機能には InnoDB にバグがあるようです。特定のバージョンの MySQL ではエンジンが無効になり、エラーが発生します。
解決策:
この問題を回避するには、テーブルを一時的に MyISAM に変換し、IGNORE を使用して一意のインデックスを追加します。
ALTER TABLE table ENGINE MyISAM; ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field); ALTER TABLE table ENGINE InnoDB;
注: 外部キー制約が存在する場合は、まずそれらを削除し、変換後に再度追加する必要があります。
以上がIGNORE を使用している場合でも、ALTER IGNORE TABLE が整合性制約違反で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。