J'ai une table dont la clé primaire est utilisée dans plusieurs autres tables et a plusieurs clés étrangères vers d'autres tables.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
Le problème est que lorsque j'essaie de supprimer l'une des colonnes de clé étrangère (c'est-à-dire locationIDX), cela me donne une erreur.
"ERREUR 1025 (HY000): Erreur lors du changement de nom"
Comment puis-je supprimer la colonne dans le tableau d'affectation ci-dessus sans obtenir cette erreur?
mysql
foreign-keys
constraints
mysql-error-1025
A dessiné
la source
la source
SHOW CREATE TABLE footable;
pour voir quel est le nom de la contrainte. Ce n'est pas le nom de la colonne en soi. Merci d'avoir répondu!Les clés étrangères sont là pour garantir l'intégrité des données, vous ne pouvez donc pas supprimer une colonne tant qu'elle fait partie d'une clé étrangère. Vous devez d'abord déposer la clé.
Je pense que la requête suivante le ferait:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
la source
Comme tout le monde l'a dit ci-dessus, vous pouvez facilement supprimer un FK. Cependant, je viens de remarquer qu'il peut être nécessaire de supprimer la clé elle-même à un moment donné. Si vous avez un message d'erreur pour créer un autre index comme le dernier, je veux dire avec le même nom, il serait utile de supprimer tout ce qui est lié à cet index.
ALTER TABLE your_table_with_fk drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result, drop KEY the_same_name_as_above
la source
Vérifiez quel est le nom CONSTRAINT et le nom FOREIGN KEY:
SHOW CREATE TABLE table_name;
Supprimez à la fois le nom CONSTRAINT et le nom FOREIGN KEY:
ALTER TABLE table_name DROP FOREIGN KEY the_name_after_CONSTRAINT, DROP KEY the_name_after_FOREIGN_KEY;
J'espère que cela t'aides!
la source
Voici un moyen de supprimer la contrainte de clé étrangère, cela fonctionnera. MODIFIER TABLE
location
.location_id
DROP FOREIGN KEYlocation_ibfk_1
;la source
Hé, j'ai suivi une séquence ci-dessus et j'ai trouvé une solution.
SHOW CREATE TABLE footable;
Vous obtiendrez le nom de la contrainte FK comme
Vous devez maintenant supprimer ces contraintes. par alter table commantd
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
Puis déposez la colonne du tableau,
alter table ProjectsInfo drop column clientId;
la source
Vous obtenez généralement cette erreur si vos tables utilisent le moteur InnoDB. Dans ce cas, vous devrez supprimer la clé étrangère, puis modifier la table et supprimer la colonne.
Mais la partie délicate est que vous ne pouvez pas supprimer la clé étrangère en utilisant le nom de la colonne, mais à la place, vous devrez trouver le nom utilisé pour l'indexer. Pour trouver cela, exécutez la sélection suivante:
SHOW CREATE TABLE region; Cela devrait vous montrer une ligne, dans le coin supérieur gauche, cliquez sur l'option +, cliquez sur le bouton de texte intégral raio puis cliquez sur le bouton aller.Vous obtiendrez le nom de l'index, quelque chose comme ceci:
CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) REFERENCES country (id) ON SUPPRIMER PAS D'ACTION SUR MISE À JOUR PAS D'ACTION Il suffit maintenant d'émettre un:
alter table region drop clé étrangère region_ibfk_1;
ou
plus simplement tapez simplement: - alter table TableName drop clé étrangère TableName_ibfk_1 ;
rappelez-vous que la seule chose à faire est d'ajouter _ibfk_1 après votre nom de table pour faire comme ceci: - TableName _ibfk_1
la source
Vous ne pouvez pas supprimer la colonne de clé étrangère car elle est référencée à partir de la table
assignmentStuff
. Vous devez donc d'abord supprimer la contrainte de clé étrangèreassignmentStuff.assignmentIDX
.Une question similaire a déjà été posée ici . Vérifiez également ici pour plus d'informations.
la source
Essaye ça:
alter table Documents drop FK__Documents__Custo__2A4B4B5E
la source
étape 1:
show create table vendor_locations;
étape 2:
ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
cela a fonctionné pour moi.
la source
il faut d'abord obtenir le nom réel de la contrainte par cette requête
SHOW CREATE TABLE TABLE_NAME
Cette requête entraînera le nom de contrainte de la clé étrangère, maintenant la requête ci-dessous la supprimera.
ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1
le dernier nombre dans le nom de la contrainte ci-dessus dépend du nombre de clés étrangères que vous avez dans la table
la source