Impossible de supprimer l'index requis par la contrainte de clé étrangère MySQL
P粉882357979
2023-08-14 13:34:46
<p>Je dois modifier ma base de données existante pour ajouter une colonne. Par conséquent, je souhaite également mettre à jour le champ UNIQUE pour inclure cette nouvelle colonne. J'essaie de supprimer l'index actuel, mais je continue de recevoir le message d'erreur <code>MySQL ne peut pas supprimer l'index nécessaire dans une contrainte de clé étrangère</code></p>
<pre class="brush:php;toolbar:false;">CREATE TABLE matable_a (
ID TINYINT NON NULL CLÉ PRIMAIRE AUTO_INCREMENT,
Nom VARCHAR(255) NON NULL,
Nom unique)
) MOTEUR=InnoDB;
CRÉER TABLE matable_b (
ID TINYINT NON NULL CLÉ PRIMAIRE AUTO_INCREMENT,
Nom VARCHAR(255) NON NULL,
Nom unique)
) MOTEUR=InnoDB;
CRÉER TABLE matable_c (
ID TINYINT NON NULL CLÉ PRIMAIRE AUTO_INCREMENT,
Nom VARCHAR(255) NON NULL,
Nom unique)
) MOTEUR=InnoDB;
CRÉER TABLE `matable` (
`ID` int(11) NON NULL AUTO_INCREMENT,
`AID` tinyint(5) NON NULL,
`BID` tinyint(5) NON NULL,
`CID` tinyint(5) NON NULL,
CLÉ PRIMAIRE (`ID`),
CLÉ UNIQUE `AID` (`AID`,`BID`,`CID`),
CLÉ `BID` (`BID`),
CLÉ `CID` (`CID`),
CONTRAINTE `mytable_ibfk_1` CLÉ ÉTRANGÈRE (`AID`) RÉFÉRENCES `mytable_a` (`ID`) SUR DELETE CASCADE,
CONTRAINTE `mytable_ibfk_2` CLÉ ÉTRANGÈRE (`BID`) RÉFÉRENCES `mytable_b` (`ID`) SUR DELETE CASCADE,
CONTRAINTE `mytable_ibfk_3` CLÉ ÉTRANGÈRE (`CID`) RÉFÉRENCES `mytable_c` (`ID`) SUR DELETE CASCADE
) MOTEUR=InnoDB;
mysql> ALTER TABLE matable DROP INDEX AID ;
ERREUR 1553 (HY000) : Impossible de supprimer l'index 'AID' : nécessaire dans une contrainte de clé étrangère</pre>
<p><br /></p>
Étape 1
Liste des clés étrangères (notez qu'elles sont différentes des noms d'index)
Le résultat affichera le nom de la clé étrangère.
Format :
Étape 2
Supprimer (clé étrangère/clé primaire/clé)
Étape 3
Supprimer l'index.
Vous devez supprimer la clé étrangère. Dans MySQL, les clés étrangères créent automatiquement un index sur la table (cette SO question concerne ce sujet).