21

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

4

10 回答 10

40

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

这适用于 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();
于 2010-08-16T13:09:08.157 回答
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');
于 2010-08-16T12:58:20.983 回答
2

您必须分别删除数据库中的每个表,因此删除数据库并重新创建它实际上是最短的路线(也是最快的路线)。

于 2010-08-16T12:59:01.950 回答
2

当我不得不在 Oracle 中执行此操作时,我会编写一个 select 语句来为我生成 drop table 语句。大意是:

选择“删除表”|| 表名 || ';' 来自用户表;

然后我可以将 select 语句的输出通过管道传输到文件中。运行此程序后,我将拥有一个文件,可以为我删除所有表格。它看起来像:

删除表表 1;

删除表表 2;

删除表表 3;

ETC...

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

于 2010-08-16T12:59:02.897 回答
2

用于SHOW TABLE STATUS获取数据库中的所有表,然后遍历结果并一一删除。

于 2010-08-16T13:05:21.453 回答
2

评论中有一些解决方案:http: //dev.mysql.com/doc/refman/5.1/en/drop-table.html

于 2010-08-16T14:39:45.543 回答
2

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

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

<?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);
?>
于 2015-07-27T16:43:18.457 回答
1

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

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

于 2020-06-28T17:34:46.390 回答
-1

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

$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();
于 2018-07-30T20:05:47.697 回答
-1

你可以执行这个。如果我错过任何表格,只需添加更多表格

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;
于 2019-07-30T23:45:53.907 回答