Gibt es eine gute einfache Möglichkeit, alle Tabellen aus einer MySQL-Datenbank zu löschen und dabei eventuell vorhandene Fremdschlüsseleinschränkungen zu ignorieren?
mysql
foreign-keys
innodb
sql-drop
bcmcfc
quelle
quelle
Drop
aus dem Dropdown-Menü auswählen , können Sie dasForeign key check
Kontrollkästchen deaktivieren .Antworten:
Ich fand den generierten Satz von drop-Anweisungen nützlich und empfehle diese Optimierungen:
Hinweis 1: Dadurch werden die DROP-Anweisungen nicht ausgeführt, sondern es wird nur eine Liste von ihnen angezeigt. 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`
AnweisungDROP VIEW `VIEW_NAME`
manuell korrigieren .Damit die drop-Anweisungen bei Bedarf funktionieren:
Dadurch werden die referenziellen Integritätsprüfungen deaktiviert. Wenn Sie also die erforderlichen Löschvorgänge ausgeführt haben, möchten Sie die Schlüsselüberprüfung mit zurücksetzen
NB: Um die Ausgabe von SELECT einfacher zu verwenden, kann die Option mysql -B helfen.
quelle
DROP DATABASE foo; CREATE DATABASE foo;
, dass es nicht ganz dasselbe ist, aber für mich funktioniert hat.Von http://www.devdaily.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys :
(Beachten Sie, dass hiermit die Deaktivierung von Fremdschlüsselprüfungen beantwortet wird, um die Tabellen in beliebiger Reihenfolge löschen zu können. Es wird nicht beantwortet, wie automatisch Drop-Table-Anweisungen für alle vorhandenen Tabellen generiert und in einem einzigen Skript ausgeführt werden. Jean's Antwort tut.)
quelle
Hier ist die gespeicherte Prozedur von SurlyDre so geändert, dass Fremdschlüssel ignoriert werden:
quelle
_tableName
mit einem Backquotes abschließen. Andernfalls schlägt es bei einigen Tabellen wiegroup
oder anderen Schlüsselwörtern fehl .Jeder der oben genannten Ansätze beinhaltet viel mehr Arbeit als dieser AFAICT ...
quelle
mysqldump
zumysql
, ohne den Umweg über eine Datei zu gehen?mysqldump
ingrep
inmysql
, es funktioniert. Nochmals vielen Dank für Ihre Lösung, es ist gut.Aus dieser Antwort ergibt sich
ausführen:
Dadurch werden Tabellen aus der aktuell verwendeten Datenbank gelöscht. Sie können die aktuelle Datenbank mit einstellen
use
.Andernfalls ist die von Dion akzeptierte Antwort einfacher, außer dass Sie sie zweimal ausführen müssen, erstens, um die Abfrage zu erhalten, und zweitens, um die Abfrage auszuführen. Ich habe einige dumme Back-Ticks bereitgestellt, um Sonderzeichen in Datenbank- und Tabellennamen zu vermeiden.
quelle
Hier ist eine Cursor-basierte Lösung. Etwas langwierig, funktioniert aber als einzelner SQL-Stapel:
quelle
Du kannst tun:
Führen Sie dann die generierten Abfragen aus. Sie löschen jede einzelne Tabelle in der aktuellen Datenbank.
Hier ist eine Hilfe auf
drop table
Befehl.quelle
||
dies der Verkettungsoperator ist. Insbesondere enthält der MySQL SQL-ModusPIPES_AS_CONCAT
. Referenz: dev.mysql.com/doc/refman/5.0/en/…concat
anstelle von||
Ich habe mir diese Änderung für die Antwort von Dion Truter ausgedacht, um es mit vielen Tabellen einfacher zu machen:
Dadurch wird das gesamte Objekt in einem Feld zurückgegeben, sodass Sie alle Tabellen einmal kopieren und löschen können (
Copy Field Content (unquoted)
in Workbench verwenden). Wenn Sie viele Tabellen haben, können Sie einige Grenzen überschreitenGROUP_CONCAT()
. Wenn ja, erhöhen Sie die maximale Variable (undmax_allowed_packet
, falls erforderlich).quelle
Das Googeln zum Thema bringt mich immer zu dieser SO-Frage. Hier ist also funktionierender MySQL-Code, der BEIDE Tabellen und Ansichten löscht:
quelle
Ein Einzeiler zum Löschen aller Tabellen aus einer bestimmten Datenbank:
Wenn Sie dies ausführen, werden alle Tabellen aus der Datenbank DATABASE_NAME gelöscht.
Und das Schöne daran ist, dass der Datenbankname nur einmal explizit geschrieben wird.
quelle
Hier ist eine automatisierte Möglichkeit, dies über ein Bash-Skript zu tun:
quelle
Wenn Sie unter Linux (oder einem anderen System, das Piping, Echo und Grep unterstützt) arbeiten, können Sie dies mit einer Zeile tun:
Ich weiß, dass dies eine alte Frage ist, aber ich denke, diese Methode ist schnell und einfach.
quelle
In PHP ist es so einfach wie:
Denken Sie daran, YOURDB in den Namen Ihrer Datenbank und natürlich in den Benutzer / Pass zu ändern.
quelle
In einer Linux-Shell wie bash / zsh:
Dadurch werden die Befehle generiert und sofort an eine zweite Client-Instanz weitergeleitet, die die Tabellen löscht.
Das clevere Stück wird natürlich von anderen Antworten hier kopiert - ich wollte nur einen kopierbaren und einfügbaren Einzeiler (ish), um tatsächlich die Arbeit zu erledigen, die das OP wollte.
Beachten Sie natürlich, dass Sie Ihre Anmeldeinformationen auch (zweimal) in diese MySQL-Befehle eingeben müssen, es sei denn, Sie haben ein sehr niedriges Sicherheits-Setup. (oder Sie könnten Ihren MySQL-Befehl aliasen, um Ihre Creds einzuschließen.)
quelle
Fügen Sie hier einfach einen nützlichen Kommentar von Jonathan Watt ein , um alle Tabellen zu löschen
Es hilft mir und ich hoffe, es könnte nützlich sein
quelle
Löschen Sie alle Tabellen aus der Datenbank mit einer einzigen Zeile aus der Befehlszeile:
Wobei [Benutzername], [Passwort], [Hostname] und [Datenbankname] durch echte Daten (Benutzer, Passwort, Hostname, Datenbankname) ersetzt werden müssen.
quelle
Dies ist ein ziemlich alter Beitrag, aber keine der Antworten hier hat die Frage meiner Meinung nach wirklich beantwortet. Ich hoffe, mein Beitrag wird den Menschen helfen!
Ich habe diese Lösung bei einer anderen Frage gefunden, die für mich sehr gut funktioniert:
Dadurch werden tatsächlich alle Ihre Tabellen in der Datenbank geleert
DB_NAME
und nicht nur die angezeigtTRUNCATE
Befehlszeile .Hoffe das hilft!
quelle
Aufbauend auf der Antwort von @Dion Truter und @Wade Williams löscht das folgende Shell-Skript alle Tabellen, nachdem es zuerst gezeigt hat, was ausgeführt werden soll, und gibt Ihnen die Möglichkeit, mit Strg-C abzubrechen.
quelle
Diese Lösung basiert auf der Antwort von @SkyLeach, unterstützt jedoch das Löschen von Tabellen mit Fremdschlüsseln.
quelle
quelle
Einfach und klar (kann sein).
Könnte keine ausgefallene Lösung sein, aber 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:
MySQL-Shell
quelle
Ich verwende Folgendes mit einem MSSQL-Server:
Ersetzen Sie YOUR_DATABASE durch den Namen Ihrer Datenbank oder entfernen Sie die gesamte IF-Anweisung (ich mag die zusätzliche Sicherheit).
quelle
Beste Lösung für mich bisher
Wählen Sie Datenbank -> Rechtsklick -> Aufgaben -> Skripte generieren - wird der Assistent zum Generieren von Skripten geöffnet. Klicken Sie nach Auswahl der Objekte in der festgelegten Skriptoption auf die Schaltfläche Erweitert . Wählen Sie unter "Script DROP and CREATE" die Option Script DROP .
Skript ausführen.
quelle