「偽の外部キー制約の失敗」謎: 予期せぬエラーの調査
エリア テーブルに対して DROP TABLE ステートメントを実行すると、ユーザーが「親行を削除または更新できません: 外部キー制約が失敗しました。」という謎のエラーが発生します。この一見ややこしい問題は、エリアへの外部キー参照を持つ他のすべてのテーブルを注意深く削除した後でも発生します。
エリア テーブルの詳細を詳しく調べると、このテーブルには主キー (area_id)、一意のキー (nombre_area_UNIQUE)、および null 以外の列のコレクション。 InnoDB テーブルは、個別のスキーマ間で外部キー制約を排除するように設計されているため、存在しないテーブルの外部キーの存在は謎になります。
しかし、問題の核心は、使用されている特定のソフトウェアにあります。 MySQL Query Browser または phpMyAdmin を使用すると、各クエリが新しい接続を開始するという顕著な特徴が生じます。この特異性により、ユーザーは 1 つのクエリ内に一連の Drop ステートメント全体を含める必要があります。
この状況を効果的に修正するには、次の一連のステートメントを展開できます。
<code class="sql">SET FOREIGN_KEY_CHECKS=0; DROP TABLE my_first_table_to_drop; DROP TABLE my_second_table_to_drop; SET FOREIGN_KEY_CHECKS=1;</code>
次のように呼び出します。 SET FOREIGN_KEY_CHECKS=0 の場合、外部キー制約が一時的に無効になり、ターゲット テーブルの削除が容易になります。その後、SET FOREIGN_KEY_CHECKS=1 で制約を再度有効にすると、追加の保護層が提供されます。したがって、再発エラーが回避され、ユーザーは目的のテーブルを正常に削除できるようになります。
以上がMySQL でテーブルを削除すると「外部キー制約が失敗しました」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。