web-dev-qa-db-fra.com

Comment supprimer toutes les tables de la base de données sans supprimer la base de données elle-même?

Je voudrais supprimer toutes les tables de la base de données, mais pas supprimer la base de données elle-même. C'est possible ? Je cherche simplement un moyen plus rapide que de supprimer la base de données et de la créer à nouveau. Merci !

20
Misha Moroshko

Le plus court est de recréer la base de données. mais si vous ne voulez pas ...

Ceci est pour MySQL/PHP. Pas testé mais quelque chose comme ça.

$mysqli = new mysqli("Host", "my_user", "my_password", "database");
$mysqli->query('SET foreign_key_checks = 0');
if ($result = $mysqli->query("SHOW TABLES"))
{
    while($row = $result->fetch_array(MYSQLI_NUM))
    {
        $mysqli->query('DROP TABLE IF EXISTS '.$row[0]);
    }
}

$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();
35
Tomasz Struczyński

Il n'y a pas de moyen simple de faire cela. Soit vous devez savoir à l'avance quelles sont les tables:

// éditez vous pouvez obtenir cette information en utilisant la requête SHOW TABLE STATUS

$tables = array('users','otherdata');
foreach($tables as $table){
  db.execute("DROP TABLE "+$table);
}

ou vous pouvez supprimer la base de données et la recréer vide (ce n'est vraiment pas tant d'effort!):

db.execute('DROP DATABASE SITEDATA');
db.execute('CREATE DATABASE SITEDATA');
5
fredley

Il y a quelques solutions ici dans les commentaires: http://dev.mysql.com/doc/refman/5.1/en/drop-table.html

2
Vladislav Rastrusny

Vous devez supprimer chaque table de la base de données séparément. Par conséquent, supprimer et recréer la base de données sera en fait la route la plus courte (et la plus rapide en l'occurrence).

2
wimvds

Lorsque je devais le faire dans Oracle, j'écrivais une instruction select générant les instructions de la table de suppression pour moi. Quelque chose à l'effet de:

Sélectionnez 'DROP TABLE' || nom_table || ';' from user_tables;

Je pourrais alors diriger la sortie de l'instruction select vers un fichier. Après avoir exécuté ceci, j'aurais un fichier qui supprimerait tous mes tableaux pour moi. Cela ressemblerait à quelque chose comme:

DROP TABLE TABLE1;

DROP TABLE TABLE2;

DROP TABLE TABLE3;

etc...

Pas un expert mysql, mais j'imagine que cela aurait une facilité similaire à celle de sélectionner toutes les tables pour un schéma, ainsi que la sortie directe d'une instruction SQL dans un fichier.

2
Brett McCann

J'avais besoin de supprimer toutes les tables sauf un couple d'un dump par inadvertance.

Une fonction PHP pour supprimer toutes les tables sauf certaines (adaptées de ici ), pour toute autre personne pouvant avoir besoin de:

<?php
$mysqli = new mysqli( "localhost", "user", 'password', "database");
function drop_all_tables($exceptions_array, $conn) {
    $exceptions_string="('" ;
    foreach ($exceptions_array as $table) {
        $exceptions_string .=$table . "','";
    }
    $exceptions_string=rtrim($exceptions_string, ",'");
    $exceptions_string .="')" ;
    $sql="SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
         FROM information_schema.tables
         WHERE table_schema = DATABASE() AND table_name NOT IN $exceptions_string";
    $result=$ conn->query($sql);
    while($row = $result->fetch_array(MYSQLI_NUM)) {
        $conn->query($row[0]);
    }
}

//drop_all_tables(array("table1","table2","table3","table4"), $mysqli);
?>
2
Abdul

Utilisez SHOW TABLE STATUS pour obtenir toutes les tables de votre base de données, puis effectuez une boucle sur les résultats et déposez-les une par une.

2
IcanDivideBy0

La requête en une seule ligne pour supprimer toutes les tables, comme ci-dessous:

$dbConnection = mysqli_connect("hostname", "username", "password", "database_name");
$dbConnection->query('SET foreign_key_checks = 0');

$qry_drop = "DROP TABLE IF EXISTS buildings, business, computer, education, fashion, feelings, food, health, industry, music, nature, people, places, religion, science, sports, transportation, travel";            
$dbConnection->query($qry_drop);

$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();
0
user9453341