Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL DROP alle Tabellen und ignoriert Fremdschlüssel

Ich fand den generierten Satz von Drop-Anweisungen nützlich und empfehle diese Anpassungen:

  1. Beschränken Sie die generierten Drops wie folgt auf Ihre Datenbank:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Anmerkung 1:Dies führt die DROP-Anweisungen nicht aus, sondern gibt Ihnen nur eine Liste davon. Sie müssen die Ausgabe ausschneiden und in Ihre SQL-Engine einfügen, um sie auszuführen.

Hinweis 2:Wenn Sie VIEWs haben, müssen Sie jede DROP TABLE `VIEW_NAME` korrigieren -Anweisung an DROP VIEW `VIEW_NAME` manuell.

  1. Hinweis, per http://dev.mysql .com/doc/refman/5.5/en/drop-table.html , Dropping mit cascade ist sinnlos / irreführend:

Damit die Drop-Anweisungen funktionieren, benötigen Sie daher Folgendes:

SET FOREIGN_KEY_CHECKS = 0

Dadurch werden die referenziellen Integritätsprüfungen deaktiviert. Wenn Sie also mit den erforderlichen Drops fertig sind, sollten Sie die Schlüsselprüfung mit

zurücksetzen
SET FOREIGN_KEY_CHECKS = 1
  1. Die endgültige Ausführung sollte folgendermaßen aussehen:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

NB:Um die Ausgabe von SELECT einfacher zu verwenden, kann die Option mysql -B hilfreich sein.