2009-04-07 14 views

Antwort

6

Sie können Tabellennamen mit

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 

bekommen und die Abschneide machen,

selbst, können Sie

SELECT 'TRUNCATE TABLE ' + table_name + ';' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 

Und dann iterieren die resultset Ausführung der String-Abfrage für jeden Datensatz machen .

2

Ja. Im Grunde müssen Sie eine Liste aller Tabellen in der Datenbank abrufen, dann über diese Liste iterieren und einen TRUNCATE TABLE $tablename für jeden Eintrag ausgeben.

Das sieht wie ein anständig genug Umsetzung: Truncate all tables in a MySQL database

12

Der einfachste Weg, es zu tun, wenn Sie die Berechtigungen haben, ist:

 
DROP DATABASE dbName; 
CREATE DATABASE dbName; 
USE DATABASE dbName; 

Die Alternative ist die information_schema Datenbank für Trigger abzufragen, gespeicherte Routinen (Prozeduren und Funktionen), Tabellen, Views und möglicherweise noch etwas anderes und lassen sie einzeln fallen.

Auch danach ist Ihre Datenbank möglicherweise noch nicht im selben Status wie eine neu erstellte Datenbank, da sie möglicherweise einen benutzerdefinierten Standardzeichensatz und Sortierfolge enthält. Verwenden Sie ALTER DATABASE, um das zu ändern.

Da Features immer hinzugefügt werden (Ereignisse ...), werden Sie mehr und mehr auf diese Weise arbeiten. Die einzige Möglichkeit, die Datenbank vollständig zu leeren, besteht darin, sie zu löschen und neu zu erstellen.

+0

werden Sie die Struktur der Tabelle verlieren –

+1

Nun das Thema Starter sagte nichts, außer er eine leere Datenbank mit dem gleichen Namen will, so ist es durchaus die Frage beantwortet. Es hat keinen Sinn, möglicherweise falsche Annahmen zu machen, deshalb erhielt diese Antwort +1 von mir. – Flavius

+0

Wenn der Benutzer nicht über die Berechtigung "CREATE DATABASE" verfügt, bleiben sie hängen. –

4

Sie können eine Liste aller Tabellen in einer Datenbank abrufen ($databaseName), durchlaufen Sie alle und wenden Sie jeweils TRUNCATE TABLE an.

$result = mysqli_query($link, "SHOW TABLES IN `$databaseName`"); 
while ($table = mysqli_fetch_array($result)) { 
    $tableName = $table[0]; 
    mysqli_query($link, "TRUNCATE TABLE `$databaseName`.`$tableName`"); 

    if (mysqli_errno($link)) echo mysqli_errno($link) . ' ' . mysqli_error($link); 
    else echo "$tableName was cleared<br>"; 
} 

Dies löscht den Inhalt aller Tabellen in einer Datenbank und behält die Struktur bei.

+1

Bitte [bearbeiten] mit mehr Informationen. Code-only und "try this" -Antworten werden [entmutigt] (// meta.stackexchange.com/questions/196187), weil sie keinen durchsuchbaren Inhalt enthalten und nicht erklären, warum jemand "das versuchen sollte". Wir bemühen uns, eine Ressource für Wissen zu sein. – Mogsdad

2

Das funktionierte für mich.

mysql -u < DB-USER > -p<DB-PASS> --silent --skip-column-names -e "SHOW TABLES" <DB-NAME> | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -u < DB-USER > -p< DB-PASS > -v < DB-NAME >