wake-up-neo.com

Erzwinge das Löschen von mysql unter Umgehung der Fremdschlüsselbeschränkung

Ich versuche, alle Tabellen bis auf eine aus einer Datenbank zu löschen. Am Ende wird der folgende Fehler angezeigt:

Übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl

Natürlich könnte ich probeweise herausfinden, was diese Schlüsselbeschränkungen sind, und schließlich alle Tabellen löschen, aber ich würde gerne wissen, ob es eine schnelle Möglichkeit gibt, das Löschen aller Tabellen zu erzwingen (da ich diese I erneut einfügen kann möchte nicht gelöscht werden).

Google hat mich auf eine Website ausgerichtet, die die folgende Methode vorschlug:

mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;

Kurz gesagt, es hat nicht wirklich funktioniert, da ich den gleichen Fehler erhalten habe, während ich in der Lage war, einige weitere Tabellen zu löschen. Ich habe auf Stack Overflow-Wegen gesehen, wie man alle Fremdschlüssel mit einer bestimmten Tabelle verknüpft, aber das ist viel zu zeitaufwendig, wenn ich nicht alles skripte (was machbar ist, wenn es keine andere Option gibt).

Die Datenbank ist 4.1, daher kann ich DROP DATABASE Nicht verwenden.

Ideen?

129
johnnyArt

Dies könnte für jemanden nützlich sein, der von einer Suche hier abbricht. Stellen Sie sicher, dass Sie versuchen, ein Tabelle und kein Ansicht zu löschen.

 SET foreign_key_checks = 0; 
 - Löschen von Tabellen 
 Löschen von Tabellen ... 
 - Löschen von Ansichten 
 Löschen von Ansichten ... 
 SET foreign_key_checks = 1; 

SET foreign_key_checks = 0 setzt Fremdschlüsselprüfungen auf aus und dann SET foreign_key_checks = 1 dient dazu, die Fremdschlüsselprüfungen wieder einzuschalten. Während die Prüfungen deaktiviert sind, können die Tabellen gelöscht werden. Anschließend werden die Prüfungen wieder aktiviert, um die Integrität der Tabellenstruktur zu gewährleisten.

367
PAT

Wenn Sie phpmyadmin verwenden, ist diese Funktion bereits vorhanden.

  • Wählen Sie die Tische aus, die Sie löschen möchten
  • Wählen Sie aus der Dropdown-Liste am Ende der Tabellen die Option "Ablegen" aus
  • Eine neue Seite mit dem Kontrollkästchen "Fremdschlüsselprüfung" wird geöffnet. Deaktivieren Sie dieses Kontrollkästchen.
  • Bestätigen Sie den Löschvorgang mit "Ja".
15
Ali Azhar

Sie können die folgenden Schritte ausführen, es hat bei mir funktioniert, um eine Tabelle mit Einschränkungen zu löschen. Die Lösung wurde bereits im obigen Kommentar erläutert. Ich habe gerade einen Screenshot hinzugefügt.enter image description here

4
srinivas

Drop-Datenbank ist in allen Versionen von MySQL vorhanden. Wenn Sie jedoch die Tabellenstruktur beibehalten möchten, finden Sie hier eine Idee

mysqldump --no-data --add-drop-database --add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql

Dies ist ein Programm, kein MySQL-Befehl

Dann loggen Sie sich in MySQL und

source dump.sql;

3
MindStalker

Einfache Lösung, um alle Tabellen gleichzeitig vom Terminal aus zu löschen.

Dies umfasste ein paar Schritte in Ihrer MySQL-Shell (keine Ein-Schritt-Lösung), das hat mir geholfen und meinen Tag gerettet.

Arbeitete für Server-Version: 5.6.38 MySQL Community Server (GPL)

Schritte, denen ich gefolgt bin:

 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> 
0
Sanjay Khadka