我想从数据库中删除所有表,但不删除数据库本身。是否可以 ?我只是在寻找比删除数据库并再次创建它更短的方法。谢谢 !
10 回答
最短的是重新创建数据库。但如果你不想...
这适用于 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();
没有简单的方法可以做到这一点。您需要提前知道表格是什么:
//编辑您可以使用查询获取此信息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');
您必须分别删除数据库中的每个表,因此删除数据库并重新创建它实际上是最短的路线(也是最快的路线)。
当我不得不在 Oracle 中执行此操作时,我会编写一个 select 语句来为我生成 drop table 语句。大意是:
选择“删除表”|| 表名 || ';' 来自用户表;
然后我可以将 select 语句的输出通过管道传输到文件中。运行此程序后,我将拥有一个文件,可以为我删除所有表格。它看起来像:
删除表表 1;
删除表表 2;
删除表表 3;
ETC...
不是 mysql 专家,但我想它会有类似的工具来选择模式的所有表,以及从 SQL 语句直接输出到文件。
用于SHOW TABLE STATUS
获取数据库中的所有表,然后遍历结果并一一删除。
评论中有一些解决方案:http: //dev.mysql.com/doc/refman/5.1/en/drop-table.html
我需要从无意的转储中删除除了一对之外的所有表。
一个 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);
?>
执行此操作的程序方法如下:
$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();
.
删除所有表的单行查询,如下所示:
$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();
你可以执行这个。如果我错过任何表格,只需添加更多表格
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;