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.
Antworten
Zu viele Anzeigen?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
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!
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
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;
- See previous answers
- Weitere Antworten anzeigen