コマンドプロンプトを使用して、Windows MySQLのすべてのテーブルを削除する方法を教えてください。私がこれをしたいのは私達のユーザーがデータベースドロップへのアクセス権を持っていますが、データベース自体を再作成するアクセス権がないからです。一度にすべてのテーブルを削除する方法はありますか?ほとんどのテーブルは外部キーとリンクされているため、特定の順序で削除する必要があります。
DROP TABLE t1, t2, t3, ...
のように文を生成し、それを実行するために準備された文を使用することができます。
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
FROM information_schema.tables
WHERE table_schema = 'database_name'; -- specify DB name here.
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
@ Devartのバージョンは正しいですが、ここでエラーを回避するためのいくつかの改善点があります。 @ Devartの回答を編集しましたが、受け入れられませんでした。
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
少なくとも1つの存在しない「ダミー」テーブルを追加してデータベース内のすべてのテーブルをすでに削除している場合、このスクリプトはNULLの結果でエラーを発生させません。
そして、あなたがたくさんのテーブルを持っているとき、それは念のために修正されました。
そして、すべてのビューを削除するというこの小さな変更はデータベースに存在します。
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @views = NULL;
SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views
FROM information_schema.views
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@views,'dummy') INTO @views;
SET @views = CONCAT('DROP VIEW IF EXISTS ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
削除したいデータベースからスクリプトを実行すると仮定します。またはこれを実行する前に:
USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
バッククォートの問題を発見してくれたSteve Horvathに感謝します。
これを試して。
これは制約(外部キー関係)を持つテーブルに対しても機能します。あるいは、単にデータベースをドロップして再作成することもできますが、それを実行するために必要な権限がない可能性があります。
mysqldump -u[USERNAME] -p[PASSWORD] \
--add-drop-table --no-data [DATABASE] | \
grep -e '^DROP \| FOREIGN_KEY_CHECKS' | \
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
外部キーチェックの効果を克服するために、生成されたスクリプトの最後にshow table
を追加し、show table
コマンドが空のセットになるまで何度も実行します。
あなたは drop the database
name__、そして 作り直すことができます それは以下で: -
mysql> drop database [database name];
mysql> create database [database name];
受け入れられた答えは、多数のテーブルを持つデータベース、例えばDrupalデータベース代わりに、次のスクリプトを参照してください。 https://stackoverflow.com/a/12917793/1507877 これはMySQL 5.5で動作します。注意:11行目の周りには、 "WHERE table_schema = SCHEMA();"があります。これは、代わりに「WHERE table_schema = 'インポートが発生するDBの名前を挿入' '」である必要があります。