2009-04-07 11 views

Répondre

6

Vous pouvez obtenir les noms de table avec

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

Et faire la troncature,

même, vous pouvez faire

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

Et itérer alors ResultSet exécuter la requête de chaîne pour chaque enregistrement .

2

Oui. Fondamentalement, vous devez obtenir une liste de toutes les tables dans la base de données, puis parcourir cette liste et émettre un TRUNCATE TABLE $tablename pour chaque entrée.

Cela ressemble à une assez bonne mise en œuvre: Truncate all tables in a MySQL database

12

La façon la plus simple de le faire, si vous avez des privilèges, est:

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

L'alternative consiste à interroger la base de données information_schema pour les déclencheurs, routines stockées (procédures et fonctions), tables, vues et éventuellement quelque chose d'autre, et déposez-les individuellement. Même après cela, votre base de données peut ne pas être toujours dans le même état qu'une nouvelle, car elle peut avoir un jeu de caractères et un ensemble de collation par défaut personnalisés. Utilisez ALTER DATABASE pour changer cela.

Comme les fonctionnalités continuent d'être ajoutées (événements ...) vous aurez de plus en plus de travail de cette façon. Donc, vraiment, la seule façon de vider complètement la base de données est de la laisser tomber et de la recréer.

+0

vous perdrez la structure –

+1

de la table Eh bien, le démarreur sujet n'a pas dit quoi que ce soit, sauf qu'il veut une base de données vide avec le même nom, donc parfaitement répondu à la question. Cela n'a pas de sens de faire des suppositions erronées, c'est pourquoi cette réponse a obtenu +1 de ma part. – Flavius

+0

Si l'utilisateur n'a pas le privilège 'CREATE DATABASE', il sera bloqué. –

4

Vous pouvez obtenir une liste de toutes les tables d'une base de données ($databaseName), les parcourir toutes et appliquer TRUNCATE TABLE à chacune d'elles.

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

Ceci efface le contenu de toutes les tables d'une base de données, en conservant la structure.

+1

S'il vous plaît [modifier] avec plus d'informations. Les réponses au code uniquement et «Essayez ceci» sont [découragées] (// meta.stackexchange.com/questions/196187), car elles ne contiennent aucun contenu interrogeable, et n'expliquent pas pourquoi quelqu'un devrait «essayer ceci». Nous faisons un effort ici pour être une ressource pour la connaissance. – Mogsdad

2

Cela a fonctionné pour moi.

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 > 
Questions connexes