MySQL ですべてのテーブルを削除する方法
このチュートリアルでは、ユーザが MySQL ですべてのテーブルをドロップする方法をいくつか紹介し、それを可能にするサンプルスクリプトをリストアップしています。
一行のコードですべてのテーブルを削除することができない理由は、大規模で設計されたデータベースでは、多くの外部キー制約が存在する可能性が高いからです。
すべてのテーブルを削除する SQL クエリ
-
まず、ドロップするテーブルが外部キー制約をチェックする必要がないようにすることです。
SET FOREIGN_KEY_CHECKS = 0;
-
次に、データベース内のすべてのテーブルにクエリを実行するスクリプトを書くように進めます。
SELECT table_name FROM information_schema.tables WHERE table_schema = db_name;
-
その後、上記のクエリの結果のテーブルをすべてコピーして、1つずつ削除していきます。
DROP TABLE IF EXISTS tableOne; DROP TABLE IF EXISTS tableTwo; DROP TABLE IF EXISTS tableThree; DROP TABLE IF EXISTS tableEtc;
-
外部キーチェックの設定をデフォルトに戻す
SET FOREIGN_KEY_CHECKS = 1;
このアプローチは、最初に外部キーチェックを無効にしたために可能になりました。そのため、テーブルを削除する順番がどうであれ、制約エラーは発生しません。ただ、スクリプトの後で外部キーチェックを再度有効にすることを確認してください。
データベースを空にして再作成する
これを可能にするためには、データベース全体を削除するので、テーブル以外にストアド関数、インデックス、ロール、およびテーブル以外のその他の設定を削除する意思があることを確認する必要があります。
これを正常に実行するためには、現在のロールがデータベース内で drop
と create
の権限を持っていなければなりません。
DROP DATABASE database_name;
ドロップした後、データベースを再作成します。
CREATE DATABASE database_name;
この方法は、すべてのテーブルを削除する最も揮発性の高い方法です。これは小規模なデータベースや実験的なデータベースにのみ適しています。
MySQL でテーブルを削除するために mysqldump
を使用する
mysqldump
は MySQL が提供するコンソールコマンドです。すでにパス変数に MySQL が設定されていると仮定すると、このコマンドを使ってデータベース内のテーブルを削除することができます。
-
最初のステップは、コンソールで外部キーチェックを無効にすることです。
echo "SET FOREIGN_KEY_CHECKS = 0" > ./temp.sql
-
mysqldump
を使ってデータベースをダンプし、テーブルを削除します。mysqldump --add-drop-table --no-data -u rootuser -p database_name | grep 'DROP TABLE' >> ./temp.sql
-
コンソールで外部キーチェックを再有効化します。
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./temp.sql
-
ダンプファイルを使用してデータベースをリストアします。
mysql -u root -p db_name < ./temp.sql
コンソールコマンドの知識があり、パス変数に MySQL が設定されていれば、より簡単に動作します。
削除されたテーブルの検証
実際にすべてのテーブルが削除されたかどうかを確認するには、このスクリプトでデータベースがまだテーブルを出力しているかどうかを確認します。
SHOW TABLES FROM database_name;
出力がない場合は、クエリが正常に実行され、その特定のデータベースのすべての SQL テーブルが削除されたことを意味します。
まとめると、SQL で直接テーブルを一括削除できないのは、リレーショナルデータベースがリレーションシップと制約に大きく依存しているからです。外部キーチェックを明示的に無効にしないでテーブルを削除することを許可されていたとしたら、リレーションシップ、制約、外部キーの構成が壊れてしまいます。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn