J'essaie de supprimer toutes les tables d'une base de données, sauf une, et j'obtiens le message d'erreur suivant:
Impossible de supprimer ou de mettre à jour une ligne parente: une contrainte de clé étrangère échoue
Bien sûr, je pourrais essayer par erreur de 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 les réinsérer). ne veux pas être supprimé).
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 fonctionné puisque j’ai reçu la même erreur alors que j’étais capable de 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 le scripte 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, je ne peux donc pas utiliser DROP DATABASE
Des idées?
Cela pourrait être utile à quelqu'un qui finit ici par une recherche. Assurez-vous que vous essayez de supprimer un table et pas un vue.
SET foreign_key_checks = 0; - Tables de suppression Table de suppression ... - Vues de suppression Vue de suppression ... SET foreign_key_checks = 1;
SET foreign_key_checks = 0
consiste à désactiver les contrôles de clé étrangère, puis SET foreign_key_checks = 1
consiste à réactiver les contrôles de clé étrangère. Lorsque les contrôles sont désactivés, les tables peuvent être supprimées, puis réactivées pour conserver l'intégrité de la structure de la table.
Si vous utilisez phpmyadmin alors cette fonctionnalité est déjà présente.
Vous pouvez utiliser les étapes suivantes, cela a fonctionné pour moi d’abandonner table avec contrainte, solution déjà expliquée dans le commentaire ci-dessus, je viens d’ajouter une capture d’écran pour cela -
La base de données de suppression existe dans toutes les versions de MySQL. Mais si vous voulez conserver la structure de la table, 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;
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.
Fonctionne pour la version serveur: 5.6.38 MySQL Community Server (GPL)
Les étapes que j'ai suivies:
1. generate drop query using concat and group_concat.
2. use database
3. turn off / disable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 0;),
4. copy the query generated from step 1
5. re enable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 1;)
6. run show table
MySQL Shell
$ mysql -u root -p
Enter password: ****** (your mysql root password)
mysql> SYSTEM CLEAR;
mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dropquery |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> USE emall_duplicate;
Database changed
mysql> SET FOREIGN_KEY_CHECKS = 0; Query OK, 0 rows affected (0.00 sec)
// copy and paste generated query from step 1
mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`;
Query OK, 0 rows affected (0.18 sec)
mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW tables;
Empty set (0.01 sec)
mysql>