Tidak dapat menjatuhkan indeks yang diperlukan oleh kekangan kunci asing MySQL
P粉882357979
2023-08-14 13:34:46
<p>Saya perlu mengubah suai pangkalan data sedia ada saya untuk menambah lajur. Oleh itu, saya juga ingin mengemas kini medan UNIK untuk memasukkan lajur baharu itu. Saya cuba menggugurkan indeks semasa, tetapi saya terus mendapat mesej ralat <kod>MySQL Tidak boleh menjatuhkan indeks yang diperlukan dalam kekangan kunci asing</code></p>
<pre class="brush:php;toolbar:false;">BUAT JADUAL mytable_a (
ID TINYINT BUKAN NULL AUTO_INCREMENT KUNCI UTAMA,
Nama VARCHAR(255) BUKAN NULL,
UNIK(Nama)
) ENJIN=InnoDB;
CIPTA JADUAL mytable_b (
ID TINYINT BUKAN NULL AUTO_INCREMENT KUNCI UTAMA,
Nama VARCHAR(255) BUKAN NULL,
UNIK(Nama)
) ENJIN=InnoDB;
CIPTA JADUAL mytable_c (
ID TINYINT BUKAN NULL AUTO_INCREMENT KUNCI UTAMA,
Nama VARCHAR(255) BUKAN NULL,
UNIK(Nama)
) ENJIN=InnoDB;
CIPTA JADUAL `mytable` (
`ID` int(11) BUKAN NULL AUTO_INCREMENT,
`BANTUAN` tinyint(5) BUKAN NULL,
`BID` tinyint(5) BUKAN NULL,
`CID` tinyint(5) BUKAN NULL,
KUNCI UTAMA (`ID`),
KUNCI UNIK `BANTUAN` (`BANTUAN`,`BID`,`CID`),
KEY `BID` (`BID`),
KEY `CID` (`CID`),
KEKANGAN `mytable_ibfk_1` FOREIGN KEY (`AID`) RUJUKAN `mytable_a` (`ID`) PADA DELETE CASCADE,
KEKANGAN `mytable_ibfk_2` KUNCI ASING (`BID`) RUJUKAN `mytable_b` (`ID`) PADA DELETE CASCADE,
KEKANGAN `mytable_ibfk_3` FOREIGN KEY (`CID`) RUJUKAN `mytable_c` (`ID`) ON DELETE CASCADE
) ENJIN=InnoDB;
mysql> ALTER TABLE mytable DROP INDEX AID;
RALAT 1553 (HY000): Tidak boleh menjatuhkan indeks 'BANTUAN': diperlukan dalam kekangan kunci asing</pre>
<p><br /></p>
Langkah 1
Senaraikan kunci asing (perhatikan bahawa ia berbeza daripada nama indeks)
Hasilnya akan menunjukkan nama kunci asing.
Format:
Langkah 2
Padam (kunci asing/kunci utama/kunci)
Langkah 3
Padam indeks.
Anda perlu memadamkan kunci asing. Dalam MySQL, kunci asing secara automatik mencipta indeks pada jadual (soalan SO ini adalah mengenai topik ini).