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 'contrainteFK_tbl_magazine_issue_mst_users
' à la ligne 1
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
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`;
DROP CONSTRAINT
n'existe pas dans MySQL. Dans votre cas, vous pouvez utiliser DROP FOREIGN KEY
à la place.
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 ...
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`;
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;
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.
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;