Domanda

Vorrei eliminare tutte le tabelle di database, ma non la cancellazione del database stesso. È possibile ? Sto solo cercando di strada più breve di rimuovere il database e creare di nuovo. Grazie!

È stato utile?

Soluzione

Il più breve è quello di ricreare database. ma se non si vuole ...

Questo è per MySQL / PHP. Non testato, ma qualcosa di simile.

$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();

Altri suggerimenti

Non c'è un modo semplice per farlo. O si avrete bisogno di sapere quali sono le tabelle sono in anticipo:

// modifica è possibile ottenere queste informazioni utilizzando la query SHOW TABLE STATUS

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

o è possibile eliminare il database e ricreare vuota (non è poi così tanto impegno!):

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

Si avrebbe dovuto far cadere ogni tavolo nel db separatamente, in modo far cadere il database e ricreare realmente sarà il percorso più breve (e il più veloce è per questo).

Quando ho dovuto fare questo in Oracle, vorrei scrivere una dichiarazione prescelta che avrebbe generato le dichiarazioni Drop Table per me. Qualcosa per l'effetto di:

Seleziona 'DROP TABLE' || table_name || ';' da user_tables;

ho potuto quindi inviare l'output della dichiarazione prescelta in un file. Dopo che ho eseguito questo, avrei un file che cadere tutte le mie tabelle per me. Sarebbe qualcosa di simile:

DROP TABLE TABLE1;

DROP TABLE TABLE2;

DROP TABLE TABELLA3;

ecc ...

Non è un esperto di mysql, ma immagino che avrebbe una struttura simile sia selezionare tutte le tabelle per uno schema, così come uscita diretta da un'istruzione SQL in un file.

Usa SHOW TABLE STATUS per ottenere tutte le tabelle nel database, allora un ciclo su risultato e cadere uno per uno.

Ci sono alcune soluzioni qui nei commenti: http: / /dev.mysql.com/doc/refman/5.1/en/drop-table.html

avevo bisogno di eliminare tutte le tabelle ad eccezione di un paio da una discarica accidentale.

Una funzione PHP per cadere tutte le tabelle tranne alcuni (adattati da qui ), per chiunque altro che potrebbe aver bisogno:

<?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 linea singola query a cadere tutte le tabelle, come di seguito:

$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();

È possibile eseguire questo. Basta aggiungere più tabelle se ho perso qualsiasi

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top