Comment déposer toutes les tables de base de données sans laisser tomber la base de données elle-même?

StackOverflow https://stackoverflow.com/questions/3493253

  •  28-09-2019
  •  | 
  •  

Question

Je voudrais supprimer toutes les tables de base de données, mais ne supprime pas la base de données elle-même. C'est possible ? Je suis à la recherche de façon plus courte que la suppression de la base de données et créer à nouveau. Merci!

Était-ce utile?

La solution

La base de données est la plus courte à recréer. mais si vous ne voulez pas ...

Ceci est pour MySQL / PHP. Non 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();

Autres conseils

Il n'y a aucun moyen simple de le faire. Soit vous aurez besoin de savoir ce que les tables sont à l'avance:

// modifier vous pouvez obtenir ces informations en utilisant la requête SHOW TABLE STATUS

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

ou vous pouvez déposer la base de données et recréer vide (il est vraiment pas beaucoup d'efforts!):

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

Il faudrait laisser tomber toutes les tables dans la db séparément, donc laisser tomber la base de données et le recréer sera effectivement le plus court chemin (et le plus rapide pour cette matière).

Quand je devais le faire dans Oracle, j'écrirait une instruction select qui générerait les déclarations de drop table pour moi. Quelque chose à l'effet de:

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

Je pourrais alors redirigez la sortie de l'instruction select dans un fichier. Après avoir couru, j'aurais un fichier qui diminueraient toutes mes tables pour moi. Il ressemblerait à quelque chose comme:

DROP table Table1;

DROP TABLE TABLEAU 2;

DROP TABLE TABLE3;

etc ...

Pas un expert MySQL, mais j'imagine qu'il aurait une installation similaire à la fois sélectionner toutes les tables pour un schéma, ainsi que la sortie directe d'une instruction SQL dans un fichier.

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

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

je devais abandonner toutes les tables, sauf deux d'une décharge accidentelle.

Une fonction PHP pour abandonner toutes les tables, sauf quelques-uns (adapté de ), pour quelqu'un d'autre qui pourrait avoir besoin:

<?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);
?>

La requête de ligne unique de laisser tomber 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();

Vous pouvez exécuter cette. Il suffit d'ajouter plus de tables si je manquais une

drop table wp_commentmeta;
drop table wp_comments;
drop table wp_links;
drop table wp_options;
drop table wp_postmeta;
drop table wp_posts;
drop table wp_term_relationships;
drop table wp_term_taxonomy;
drop table wp_termmeta;
drop table wp_terms;
drop table wp_usermeta;
drop table wp_users;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top