ホームページ >データベース >mysql チュートリアル >外部キー制約で使用されているインデックスを削除できないのはなぜですか?

外部キー制約で使用されているインデックスを削除できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 06:51:30289ブラウズ

Why Can't I Drop an Index Used in a Foreign Key Constraint?

外部キー制約で使用されているインデックスを削除できません

新しい列を追加し、UNIQUE インデックスを更新してデータベースを変更しようとしたときこの列を含めると、「MySQL は外部キー制約に必要なインデックスを削除できません。」というエラーが発生する可能性があります。これは、削除されるインデックスが別のテーブルの外部キーによって参照されている場合に発生します。

問題について

MySQL は、外部キーを持つテーブルにインデックスを自動的に作成します。これは、参照整合性と効率的なデータ取得を保証するために行われます。外部キーが定義されると、MySQL は参照テーブルのカラムに対応する参照テーブルのカラムにインデックスを作成します。インデックスを削除すると、外部キー関係の整合性に違反します。

問題の解決

この問題を解決するには、インデックスを参照する外部キー制約を削除する必要があります。索引。これは、次の構文を使用して実行できます:

ALTER TABLE [table_name] DROP FOREIGN KEY [foreign_key_name];

外部キー制約が削除されると、インデックスはエラーなしで削除できます。

例:

次の例を考えてみましょう。

CREATE TABLE mytable (
ID int(11) NOT NULL AUTO_INCREMENT,
AID tinyint(5) NOT NULL,
BID tinyint(5) NOT NULL,
CID tinyint(5) NOT NULL,
PRIMARY KEY (ID),
UNIQUE INDEX AID (AID, BID, CID),
FOREIGN KEY (AID) REFERENCES mytable_a (ID) ON DELETE CASCADE,
FOREIGN KEY (BID) REFERENCES mytable_b (ID) ON DELETE CASCADE,
FOREIGN KEY (CID) REFERENCES mytable_c (ID) ON DELETE CASCADE
);

UNIQUE INDEX AID を削除するには、まず次のステートメントを使用して外部キー制約 mytable_ibfk_1 を削除する必要があります。

ALTER TABLE mytable DROP FOREIGN KEY mytable_ibfk_1;

After外部キー制約が削除されたため、インデックスは正常に削除できます。

以上が外部キー制約で使用されているインデックスを削除できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。