418 Stimmen

Alle Tabellen in einer MySQL-Datenbank mit einem einzigen Befehl abschneiden?

Gibt es eine Abfrage (einen Befehl), um alle Tabellen in einer Datenbank in einem Arbeitsgang abzuschneiden? Ich möchte wissen, ob ich dies mit einer einzigen Abfrage tun kann.

386voto

battousaix Punkte 3765

Verwerfen (d.h. Tabellen entfernen)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "drop table $table" DATABASE_NAME; done

Trunkieren (d.h. leere Tabellen)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "truncate table $table" DATABASE_NAME; done

225voto

lalit choudhary Punkte 2047

Die folgende Abfrage erzeugt eine Liste der einzelnen Truncate-Befehle für alle Datenbanktabellen in einem Mysql-Schema(s). (Ersetzen dbSchemaName1 mit dem Namen Ihres Db-Schemas).

SELECT CONCAT('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
    FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('dbSchemaName1','dbSchemaName2');

Kopieren Sie die Abfrageergebnisse (die wie folgt aussehen könnten) und fügen Sie die Liste der Trunkierungsbefehle in eine SQL-Abfrage-Registerkarte in MySQL Worbench oder dem Abfragebefehlstool Ihrer Wahl ein:

TRUNCATE TABLE dbSchemaName1.table1;
TRUNCATE TABLE dbSchemaName1.table2;
TRUNCATE TABLE dbSchemaName1.table3;

Hinweis: Möglicherweise erhalten Sie die folgende Fehlermeldung:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

Dies tritt auf, wenn es Tabellen mit Fremdschlüsselverweisen auf die Tabelle gibt, die Sie zu löschen/abzuschneiden versuchen.

Um dies zu beheben, schalten Sie die Fremdschlüsselprüfungen aus, bevor Sie die Trunkierungsbefehle ausführen:

SET FOREIGN_KEY_CHECKS=0;  -- turn off foreign key checks
TRUNCATE TABLE dbSchemaName1.table1;  -- truncate tables
TRUNCATE TABLE dbSchemaName1.table2;
TRUNCATE TABLE dbSchemaName1.table3;
SET FOREIGN_KEY_CHECKS=1;  -- turn on foreign key checks

86voto

Nemo Punkte 3022

Verwenden Sie phpMyAdmin auf diese Weise:

Datenbankansicht => Alle prüfen (Tabellen) => Leer

Wenn Sie Fremdschlüsselprüfungen ignorieren möchten, können Sie das Kontrollkästchen deaktivieren, das besagt:

[ ] Fremdschlüsselprüfungen einschalten

Sie müssen mindestens die Version 4.5.0 oder höher verwenden, um dieses Kontrollkästchen zu aktivieren.

Es ist kein MySQL-CLI-Fu, aber hey, es funktioniert!

25voto

beach Punkte 7912

MS SQL Server 2005+ (PRINT für die tatsächliche Ausführung entfernen...)

EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''

Wenn Ihre Datenbankplattform INFORMATION_SCHEMA-Ansichten unterstützt, nehmen Sie die Ergebnisse der folgenden Abfrage und führen Sie sie aus.

SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

Versuchen Sie dies für MySQL:

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES

Durch das Hinzufügen eines Semikolons zum Concat wird die Verwendung z. B. in der mysql Workbench erleichtert.

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES

24voto

George Moik Punkte 425
SET FOREIGN_KEY_CHECKS = 0;

SELECT @str := CONCAT('TRUNCATE TABLE ', table_schema, '.', table_name, ';')
FROM   information_schema.tables
WHERE  table_type   = 'BASE TABLE'
  AND  table_schema IN ('db1_name','db2_name');

PREPARE stmt FROM @str;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET FOREIGN_KEY_CHECKS = 1;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X