171 votes

Force drop mysql en contournant la contrainte de clé étrangère

J'essaie de supprimer toutes les tables d'une base de données sauf une, et je me retrouve avec 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 pourrai réinsérer celles que je ne veux pas supprimer).

Google m'a dirigé vers un site qui proposait 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 j'ai pu supprimer quelques tables supplémentaires. 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 script tout cela (ce qui est faisable dans le cas où il n'y a pas d'autre option).

La base de données est 4.1, je ne peux donc pas utiliser DROP DATABASE

Des idées ?

1 votes

Pourquoi avez-vous choisi la réponse sélectionnée qui ne fournit même pas la solution à votre question ?

1voto

abas_rafiq Points 532

Table1 {T_Id, T_Name, TT_Id(Nullable)(Clé étrangère sur Table2 à la colonne TT_ID)}

Table2 {TT_ID,TT_Title}

1- make the foreign Key relation null able on the table1
2- update table1 set TT_ID = null where T_ID = ?
3- delete from table1

maintenant vous pouvez avoir les données de la table 1 supprimées et les données de la table 2 conservées.

-51voto

Otávio Décio Points 44200

Puisque vous n'êtes pas intéressé par la conservation des données, abandonner la totalité de la base de données et en créer un nouveau.

0 votes

J'ai oublié de dire que la base de données n'est pas mysql 5.x mais 4.x, ce qui signifie que je ne peux pas utiliser cette commande.

3 votes

Oh mon dieu, je me sens tellement stupide maintenant, j'ai remplacé le mot DATABASE par le nom réel de la base de données au lieu de l'ajouter après, merci aux deux +1.

1 votes

Que faire dans le cas où vous n'avez pas le droit de supprimer la base de données mais seulement les tables ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X