web-dev-qa-db-fra.com

Comment supprimer les contraintes de ma table MySQL?

Je veux supprimer les contraintes de ma table. Ma requête est:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

Mais j'ai une erreur:

#1064 - Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de 'contrainte FK_tbl_magazine_issue_mst_users' à la ligne 1

211
deepu sankar

Mysql a une syntaxe spéciale pour supprimer les contraintes de clé étrangère:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
377
Bohemian

J'ai eu le même problème et j'ai dû résoudre avec ce code:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
43
Wellington Lorindo

DROP CONSTRAINT n'existe pas dans MySQL. Dans votre cas, vous pouvez utiliser DROP FOREIGN KEY à la place.

24
Lothar

Si la contrainte n'est pas une clé étrangère, par exemple. un ajouté avec 'UNIQUE CONSTRAINT (colA, colB)', alors c'est un index qui peut être supprimé avec ALTER TABLE ... DROP INDEX ...

11
Robert Knight

Pour ajouter un peu à la réponse de Robert Knight, étant donné que le titre du message ne mentionne pas les clés étrangères (et que le sien n'a pas d'échantillons de code complets et que les blocs de code de commentaire de SO ne s'affichent pas aussi bien que le code des réponses blocs), je vais ajouter ceci pour unique contraintes. L'un ou l'autre de ces travaux permet de supprimer la contrainte:

ALTER TABLE `table_name` DROP KEY `uc_name`;

ou

ALTER TABLE `table_name` DROP INDEX `uc_name`;
4
jbobbins

Aussi, vous pouvez également désactiver temporairement toutes les vérifications de clés étrangères depuis une base de données mysql: SET FOREIGN_KEY_CHECKS=0; Et pour le réactiver: SET FOREIGN_KEY_CHECKS=1;

3
roelleor

Certains ORM ou structures utilisent une convention de dénomination différente pour la clé étrangère que la valeur par défaut FK_[parent table]_[referenced table]_[referencing field], car elles peuvent être modifiées. 

Laravel, par exemple, utilise [parent table]_[referencing field]_foreign comme convention de dénomination. Vous pouvez afficher les noms des clés étrangères à l'aide de cette requête, comme indiqué ici :

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

Supprimez ensuite la clé étrangère en exécutant la requête DROP FOREIGN KEY mentionnée précédemment et son nom propre. 

2
piscator

Pour ceux qui viennent ici avec MariaDB:

Notez que MariaDB autorise les instructions DROP CONSTRAINT en général, par exemple pour supprimer des contraintes de vérification:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

https://mariadb.com/kb/en/library/alter-table/

1
Markus Barthlen
  1. Aller à la vue de la structure de la table 
  2. Vous verrez 2 options en haut. Structure de la table. B. Vue des relations
  3. Maintenant, cliquez sur Vue des relations , ici vous pouvez supprimer votre contrainte de clé étrangère. Vous obtiendrez toute la relation ici.
1
Akshay Sharma