Tidak Boleh Menggugurkan Indeks Digunakan dalam Kekangan Kunci Asing
Apabila cuba mengubah suai pangkalan data dengan menambah lajur baharu dan mengemas kini indeks UNIK kepada sertakan lajur ini, pengguna mungkin menghadapi ralat "MySQL Cannot drop index needed in a foreign key constraint." Ini berlaku apabila indeks yang digugurkan dirujuk oleh kunci asing dalam jadual lain.
Memahami Isu
MySQL secara automatik mencipta indeks pada jadual yang mempunyai kunci asing. Ini dilakukan untuk memastikan integriti rujukan dan pengambilan data yang cekap. Apabila kunci asing ditakrifkan, MySQL mencipta indeks pada lajur dalam jadual rujukan yang sepadan dengan lajur dalam jadual rujukan. Memadamkan indeks melanggar integriti perhubungan utama asing.
Menyelesaikan Isu
Untuk menyelesaikan isu ini, adalah perlu untuk mengalih keluar kekangan kunci asing yang merujuk kepada indeks. Ini boleh dilakukan menggunakan sintaks berikut:
ALTER TABLE [table_name] DROP FOREIGN KEY [foreign_key_name];
Setelah kekangan kunci asing digugurkan, indeks boleh dialih keluar tanpa ralat.
Contoh:
Pertimbangkan contoh berikut:
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 );
Untuk menggugurkan BANTUAN INDEKS UNIK, kekangan kunci asing mytable_ibfk_1 mesti terlebih dahulu digugurkan menggunakan pernyataan berikut:
ALTER TABLE mytable DROP FOREIGN KEY mytable_ibfk_1;
Selepas kekangan kunci asing telah dialih keluar, indeks boleh digugurkan dengan jayanya.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggugurkan Indeks yang Digunakan dalam Kekangan Utama Asing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!