229

コマンドプロンプトを使用して、Windows MySQLのすべてのテーブルを削除するにはどうすればよいですか?これを実行したい理由は、ユーザーがデータベースドロップにアクセスできるが、データベース自体を再作成するアクセス権がないためです。このため、テーブルを手動でドロップする必要があります。すべてのテーブルを一度に削除する方法はありますか?ほとんどのテーブルは外部キーにリンクされているため、特定の順序で削除する必要があることに注意してください。

4

5 に答える 5

323

次のようなステートメントを生成できます。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; 
于 2012-09-13T09:58:49.613 に答える
287

@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;

バックティックの問題を発見してくれたSteveHorvathに感謝します。

于 2013-09-04T23:41:31.573 に答える
88

これを試して。

これは、制約(外部キー関係)のあるテーブルでも機能します。または、データベースを削除して再作成することもできますが、それを行うために必要な権限がない場合があります。

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

于 2013-09-19T08:28:42.550 に答える
51

ドロップして、以下でdatabase作成できます:-

mysql> drop database [database name];
mysql> create database [database name];
于 2012-09-13T09:58:20.107 に答える
6

受け入れられた答えは、Drupalデータベースなど、テーブルの数が多いデータベースでは機能しません。代わりに、ここのスクリプトを参照してください:https ://stackoverflow.com/a/12917793/1507877 これはMySQL5.5で動作します。注意:11行目あたりに、「WHERE table_schema = SCHEMA();」があります。代わりに、これは「WHERE table_schema='インポートが発生するDBの名前を挿入';」である必要があります。

于 2013-06-10T18:26:38.237 に答える