J'essaie de supprimer toutes les tables d'une base de données sauf une, et je finis par avoir l'erreur suivante:
Impossible de supprimer ou de mettre à jour une ligne parent: une contrainte de clé étrangère échoue
Bien sûr, je pourrais faire des essais et des erreurs pour voir quelles sont ces contraintes clés et éventuellement supprimer toutes les tables, mais j'aimerais savoir s'il existe un moyen rapide de forcer la suppression de toutes les tables (car je serai en mesure de réinsérer celles que je ne veut pas être supprimé).
Google m'a dirigé vers un site qui suggérait la méthode suivante:
mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;
La réponse courte est que cela n'a pas vraiment fait l'affaire puisque j'ai fini par recevoir la même erreur alors que je pouvais supprimer d'autres tables. J'ai vu sur Stack Overflow des moyens d'obtenir toutes les clés étrangères liées à une certaine table, mais cela prend beaucoup trop de temps à moins que je ne scénarise tout (ce qui est faisable dans le cas où il n'y a pas d'autre option)
La base de données est 4.1 donc je ne peux pas utiliser DROP DATABASE
Des idées?
la source
Réponses:
Puisque vous n'êtes pas intéressé par la conservation des données, supprimez toute la base de données et créez-en une nouvelle.
la source
Cela pourrait être utile à quelqu'un qui se retrouve ici après une recherche. Assurez-vous que vous essayez de supprimer une table et non une vue .
SET foreign_key_checks = 0
consiste à désactiver les contrôles de clé étrangère, puisSET foreign_key_checks = 1
à réactiver les contrôles de clé étrangère. Alors que les vérifications sont désactivées, les tables peuvent être supprimées, les vérifications sont ensuite réactivées pour conserver l'intégrité de la structure de la table.la source
Si vous utilisez phpmyadmin, cette fonctionnalité est déjà disponible.
la source
Vous pouvez utiliser les étapes suivantes, cela a fonctionné pour moi de supprimer la table avec contrainte, solution déjà expliquée dans le commentaire ci-dessus, je viens d'ajouter une capture d'écran pour cela -
la source
La base de données de dépôt existe dans toutes les versions de MySQL. Mais si vous souhaitez conserver la structure du tableau, voici une idée
mysqldump --no-data --add-drop-database --add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql
Ceci est un programme, pas une commande mysql
Ensuite, connectez-vous à mysql et
source dump.sql;
la source
Solution simple pour supprimer toute la table à la fois du terminal.
Cela impliquait quelques étapes dans votre shell mysql (pas une solution en une étape cependant), cela m'a fonctionné et m'a sauvé la journée.
A travaillé pour la version Server: 5.6.38 MySQL Community Server (GPL)
Étapes que j'ai suivies:
Shell MySQL
la source