2009-04-07 14 views

risposta

6

È possibile ottenere i nomi delle tabelle con

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

e rendere il Tronca,

ancora, è possibile effettuare

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

E poi iterare il gruppo di risultati di eseguire la query di stringa per ogni record .

2

Sì. In sostanza, è necessario ottenere un elenco di tutte le tabelle nel database, quindi scorrere su tale elenco ed emettere un TRUNCATE TABLE $tablename per ciascuna voce.

Questo appare come un sufficiente implementazione decente: Truncate all tables in a MySQL database

12

Il modo più semplice per farlo, se si dispone dei privilegi, è:

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

L'alternativa è quella di interrogare il database information_schema per i trigger, stored procedure (procedure e funzioni), tabelle, viste e possibilmente qualcos'altro, e rilasciarli singolarmente.

Anche dopo questo, il database potrebbe non essere ancora nello stesso stato di quello appena creato, poiché potrebbe avere un set di caratteri e un set di regole predefiniti personalizzati. Usa ALTER DATABASE per cambiarlo.

Man mano che le funzioni continuano ad essere aggiunte (eventi ...) avrete sempre più lavoro in questo modo. Quindi, in realtà, l'unico modo per svuotare completamente il database è eliminarlo e ricrearlo.

+0

si perderanno la struttura della tabella –

+1

Bene il tema di avviamento non ha detto nulla, tranne che vuole un database vuoto con lo stesso nome, in modo perfettamente risposto alla domanda. Non ha senso fare supposizioni forse errate, ecco perché questa risposta mi ha fatto +1. – Flavius

+0

Se l'utente non ha il privilegio 'CREATE DATABASE', sarà bloccato. –

4

È possibile ottenere un elenco di tutte le tabelle in un database ($databaseName), passarle in rassegna tutte e applicare a ciascuna TRUNCATE TABLE.

$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>"; 
} 

Questo cancella il contenuto di tutte le tabelle in un database, mantenendo la struttura.

+1

Si prega di [modificare] con ulteriori informazioni. Le risposte solo per codice e "prova questo" sono [scoraggiate] (// meta.stackexchange.com/questions/196187), perché non contengono contenuti ricercabili e non spiegano perché qualcuno dovrebbe "provare questo". Facciamo uno sforzo qui per essere una risorsa per la conoscenza. – Mogsdad

2

Questo ha funzionato per me.

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 >