データベース自体をドロップせずにデータベースにすべてのテーブルをドロップするにはどうすればよいですか?
-
28-09-2019 - |
質問
データベースからすべてのテーブルを削除しますが、データベース自体を削除しません。出来ますか ?データベースを削除して再度作成するよりも短い方法を探しています。ありがとう !
解決
最短は、データベースを再作成することです。しかし、あなたがしたくないなら...
これは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');
DBのすべてのテーブルを個別にドロップする必要があるため、データベースをドロップして再作成することは、実際には最短ルート(およびその問題の最速のルート)になります。
Oracleでこれをしなければならなかったとき、私のためにドロップテーブルステートメントを生成する選択されたステートメントを書きます。の効果への何か:
テーブルをドロップ] ||を選択しますtable_name || ';' from user_tables;
次に、Selectステートメントの出力をファイルにパイプすることができました。これを実行した後、私のためにすべてのテーブルをドロップするファイルがあります。それは次のように見えます:
テーブルテーブル1をドロップします。
テーブルテーブル2をドロップします。
ドロップテーブルテーブル3;
等...
MySQLの専門家ではありませんが、スキーマのすべてのテーブルを選択するのと同様の機能があると同様に、SQLステートメントからファイルへの直接出力があると思います。
使用する SHOW TABLE STATUS
データベース内のすべてのテーブルを取得するには、結果をループして1つずつドロップします。
コメントにはいくつかの解決策があります: 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);
?>
以下のように、すべてのテーブルをドロップするためのシングルラインクエリ:
$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;