我想从数据库中删除所有表,但不删除数据库本身。可能吗 ?我只是寻找比删除数据库更短的方法并再次创建它。谢谢!
答案 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();
建立的连接。