Comment faire pour supprimer les contraintes de ma table MySQL?
Je veux supprimer les contraintes de ma table. Ma question 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; consultez le manuel qui correspond à votre versions du serveur MySQL pour la bonne syntaxe à utiliser près de " contrainteFK_tbl_magazine_issue_mst_users
' à la ligne 1
- Il est intéressant de noter que si vous avez créé un
CHECK
contrainte, il n'est pas nécessaire de la faire tomber, car aucune contrainte réelle est créée. Vous pouvez sélectionner à partir deinformation_schema.table_constraints
à vérifier, et vous pouvez même exécuter l'add constraint
encore et encore sans aucune erreur. MySQL ne supporte pasCHECK
contraintes, mais permet de SQL destiné à créer (sans créer de contraintes). - demande de fonctionnalité: les clés Étrangères: abandon de la CONTRAINTE de compatibilité alias pour la CHUTE de CLÉ ÉTRANGÈRE
- Double Possible de Supprimer la Clé Primaire dans MySQL
Vous devez vous connecter pour publier un commentaire.
Mysql a une syntaxe spéciale de l'abandon des contraintes de clés étrangères:
alter table .. drop constraint
. MySQL est le plus étrange, il semble.J'ai eu le même problème et je l'ai eu à résoudre avec ce code:
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Il n'y a pas une telle chose comme
DROP CONSTRAINT
dans MySQL. Dans votre cas vous pouvez utiliser lesDROP FOREIGN KEY
à la place.Si la contrainte n'est pas une clé étrangère, par exemple. on a ajouté à l'aide de 'CONTRAINTE UNIQUE (colA, colb ne)' alors c'est un indice qui peut être supprimée à l'aide de
ALTER TABLE ... DROP INDEX ...
Aussi agréable, vous pouvez désactiver temporairement toutes les clés étrangères des contrôles à partir d'une base de données mysql:
SET FOREIGN_KEY_CHECKS=0;
Et pour l'activer de nouveau:
SET FOREIGN_KEY_CHECKS=1;
Pour ajouter un peu de Robert Chevalier de la réponse, puisque le titre du post en lui-même ne mentionne pas les clés étrangères (et depuis son n'est pas complète exemples de code et depuis DONC le commentaire de blocs de code ne sont pas visibles ainsi que les réponses des blocs de code), je vais ajouter ce pour unique contraintes. L'une de ces travaux de supprimer la contrainte:
ou
Certains ORM ou des cadres utilisation d'une autre convention de nommage pour les clés étrangères de 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
que la convention de nommage. Vous pouvez afficher les noms des clés étrangères en utilisant cette requête, comme le montre ici:Puis retirez la clé étrangère en exécutant les DROP de CLÉ ÉTRANGÈRE de la requête et son nom propre.
Pour ceux qui viennent ici à l'aide de MariaDB:
Noter que MariaDB permet de DROP CONSTRAINT états en général, par exemple de l'abandon de vérifier les contraintes:
https://mariadb.com/kb/en/library/alter-table/
CONSTRAINT CHECK(a > b)
. Pour les contraintes de clé étrangère, il semble que vous encore besoin de laDROP FOREIGN KEY
syntaxe, au moins dans MariaDB version 10.2cela fonctionne sur MySQL pour supprimer les contraintes
DROP PRIMARY KEY
ne devraient pas travailler.DROP FOREIGN KEY
fonctionne, mais vous devez spécifier dont àdrop
. Par exempleALTER TABLE tablename DROP FOREIGN KEY id_name_fk