如何在不丢弃数据库本身的情况下删除数据库中的所有表?

时间:2010-08-16 12:52:32

标签: php sql mysql drop-table

我想从数据库中删除所有表,但不删除数据库本身。可能吗 ?我只是寻找比删除数据库更短的方法并再次创建它。谢谢!

10 个答案:

答案 0 :(得分:36)

最短的是重新创建数据库。但如果你不想......

这是针对MySQL / PHP的。没有经过测试,但有类似的东西。

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

答案 1 :(得分:5)

没有简单的方法可以做到这一点。要么你需要提前知道这些表是什么:

//编辑您可以使用查询SHOW TABLE STATUS

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

或者您可以删除数据库并将其重新创建为空(这真的不是那么费力!):

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

答案 2 :(得分:2)

您必须单独删除数据库中的每个表,因此删除数据库并重新创建它实际上将是最短路径(并且是最快的路径)。

答案 3 :(得分:2)

当我必须在Oracle中执行此操作时,我会编写一个select语句,为我生成drop table语句。有什么影响:

选择'DROP TABLE'|| table_name || ';'来自user_tables;

然后我可以将select语句的输出传递给文件。在我运行之后,我会有一个文件会丢弃我的所有表格。它看起来像是:

DROP TABLE TABLE1;

DROP TABLE TABLE2;

DROP TABLE TABLE3;

等...

不是mysql专家,但我想它会有一个类似的工具来选择模式的所有表,以及从SQL语句直接输出到文件。

答案 4 :(得分:2)

使用SHOW TABLE STATUS获取数据库中的所有表,然后循环结果并逐个删除它们。

答案 5 :(得分:2)

答案 6 :(得分:2)

除了一对无意的转储之外,我需要删除所有表。

一个PHP函数,可以删除除某些表之外的所有表(改编自here),以供其他可能需要的人使用:

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

答案 7 :(得分:0)

用于删除所有表的单行查询,如下所示:

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

答案 8 :(得分:0)

您可以执行此操作。如果我错过任何表格,只需添加更多表格

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;

答案 9 :(得分:0)

执行此操作的程序方法如下:

$query_disable_checks = 'SET foreign_key_checks = 0';

$query_result = mysqli_query($connect, $query_disable_checks);

// Get the first table
$show_query = 'Show tables';
$query_result = mysqli_query($connect, $show_query);
$row = mysqli_fetch_array($query_result);

while ($row) {
  $query = 'DROP TABLE IF EXISTS ' . $row[0];
  $query_result = mysqli_query($connect, $query);

  // Getting the next table
  $show_query = 'Show tables';
  $query_result = mysqli_query($connect, $show_query);
  $row = mysqli_fetch_array($query_result);
}

这里$connect只是与mysqli_connect();建立的连接。