Je souhaite 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; consultez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de «contrainteFK_tbl_magazine_issue_mst_users
» à la ligne 1
mysql
foreign-keys
constraints
alter
deepu sankar
la source
la source
CHECK
contrainte, il n'est pas nécessaire de la supprimer car aucune contrainte réelle n'est créée. Vous pouvez sélectionner deinformation_schema.table_constraints
pour vérifier, et vous pouvez même exécuter encoreadd constraint
et encore sans erreur. MySQL ne prend pas en charge lesCHECK
contraintes mais autorise le SQL destiné à les créer (sans réellement créer les contraintes).Réponses:
Mysql a une syntaxe spéciale pour supprimer les contraintes de clé étrangère:
la source
alter table .. drop constraint
. MySQL est l'intrus, semble-t-il.J'ai eu le même problème et j'ai pu résoudre ce code:
la source
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Il n'y a rien de tel que
DROP CONSTRAINT
dans MySQL. Dans votre cas, vous pouvez utiliser à laDROP FOREIGN KEY
place.la source
Si la contrainte n'est pas une clé étrangère, par exemple. on a ajouté en utilisant 'UNIQUE CONSTRAINT (colA, colB)' alors c'est un index qui peut être supprimé en utilisant
ALTER TABLE ... DROP INDEX ...
la source
Aussi bien, vous pouvez désactiver temporairement toutes les vérifications de clés étrangères à partir d'une base de données mysql:
SET FOREIGN_KEY_CHECKS=0;
Et pour le réactiver:SET FOREIGN_KEY_CHECKS=1;
la source
Pour ajouter un peu à la réponse de Robert Knight, puisque le titre du message lui-même ne mentionne pas de clés étrangères (et puisque son 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 des contraintes uniques . L'un ou l'autre de ces travaux supprime la contrainte:
ou
la source
Certains ORM ou frameworks utilisent une convention de dénomination pour les clés étrangères différente de la valeur par défaut
FK_[parent table]_[referenced table]_[referencing field]
, car ils peuvent être modifiés.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 illustré ici :Supprimez ensuite la clé étrangère en exécutant la requête DROP FOREIGN KEY mentionnée précédemment et son nom correct.
la source
Pour ceux qui viennent ici en utilisant MariaDB:
Notez que MariaDB autorise les instructions DROP CONSTRAINT en général, par exemple pour supprimer les contraintes de vérification:
https://mariadb.com/kb/en/library/alter-table/
la source
CONSTRAINT CHECK(a > b)
. Pour les contraintes de clé étrangère, il semble que vous ayez toujours besoin de laDROP FOREIGN KEY
syntaxe, au moins dans MariaDB version 10.2la source
Il n'y a pas
DROP CONSTRAINT
dans MySql. Cela fonctionne comme par magie dans mysql 5.7la source
La façon la plus simple de supprimer la contrainte est d'utiliser la syntaxe
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
introduite dans MySQL 8.0.19 :démo db <> fiddle
la source
cela fonctionnera sur MySQL pour supprimer les contraintes
la source
DROP PRIMARY KEY
ne devrait pas fonctionner.DROP FOREIGN KEY
fonctionne mais vous devez spécifier à quidrop
. Par exempleALTER TABLE tablename DROP FOREIGN KEY id_name_fk