Je veux supprimer les contraintes de ma table. Ma requête est la suivante:
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 correspondant à votre version du serveur MySQL pourFK_tbl_magazine_issue_mst_users
laFK_tbl_magazine_issue_mst_users
à 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
place.
Si la contrainte n’est pas une clé étrangère, par exemple. un ajouté à l’aide de ‘UNIQUE CONSTRAINT (colA, colB)’ alors c’est un index qui peut être supprimé avec ALTER TABLE ... DROP INDEX ...
Pour append un peu à la réponse de Robert Knight, puisque le titre du message lui-même ne mentionne pas les clés étrangères (et que son code ne contient pas d’échantillons de code complets et que les blocs de code de commentaire ne sont pas affichés). blocs), je vais append ceci pour des contraintes uniques . Chacun de ces travaux pour supprimer la contrainte:
ALTER TABLE `table_name` DROP KEY `uc_name`;
ou
ALTER TABLE `table_name` DROP INDEX `uc_name`;
Aussi bien, vous pouvez désactiver temporairement tous les contrôles de clé étrangers à partir d’une firebase database mysql: SET FOREIGN_KEY_CHECKS=0;
Et pour le SET FOREIGN_KEY_CHECKS=1;
: SET FOREIGN_KEY_CHECKS=1;
Certains ORM ou frameworks utilisent une convention de dénomination différente pour les clés étrangères par FK_[parent table]_[referenced table]_[referencing field]
à la valeur par défaut FK_[parent table]_[referenced table]_[referencing field]
, car ils peuvent être modifiés.
Laravel utilise par exemple [parent table]_[referencing field]_foreign
comme convention de dénomination. Vous pouvez afficher les noms des clés étrangères en utilisant cette requête, comme indiqué ici :
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '' AND REFERENCED_TABLE_NAME = '';
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;
cela fonctionnera sur MySQL pour supprimer des contraintes
alter table tablename drop primary key; alter table tablename drop foreign key;