目次
テーブルを削除するSQLクエリ
データベース上に作成したテーブルを削除する場合もありますよね。
作成したテーブルを削除するには「DROP TABLE文」を使います。
この記事では、テーブルを削除するDROP TABLE文の使い方や、それ以外の方法について解説します。
イチから丁寧に説明しますので、一緒に方法を覚えていきましょう。
DROP TABLE構文
DROP TABLE文は、次のように記述します。
DROP TABLE テーブル名;
DROP TABLE文は、「CREATE」や「ALTER TABLE」とは異なり、オプションがなく非常にシンプルなSQLクエリです。
では実際に、テーブルを作成して削除してみましょう。
サンプルで次のテーブルを用意しました。
mysql> CREATE TABLE sample_list(id int);
「SHOW TABLES」クエリを実行することで、テーブルが作成できているか確認できます。
テーブルが作成された状態で、削除してみましょう。次のように実行してください。
mysql> DROP TABLE sample_list;
「Query OK」と表示されていれば削除できています。
では、もう一度「SHOW TABLES」クエリでテーブル一覧を確認してみましょう。
sample_list テーブルが削除されているはずです。
Oracleでテーブル削除
テーブルの削除文を前述しましたが、Oracleデータベースではどのような構文になるのでしょうか。
Oracleでも基本的な構文は同じですが、いくつかパターンがあるので確認していきます。
まず、テーブルを削除するのは前述の通りです。
DROP TABLE テーブル名;
次に、テーブルを制約も含めて削除する場合は次のように記述します。
DROP TABLE テーブル名 CASCADE CONSTRAINTS;
最後に、テーブルを制約も含め、完全に削除する場合は次のように記述しましょう。
DROP TABLE テーブル名 CASCADE CONSTRAINTS PURGE;
このように、削除レベルによってSQLクエリが異なるので、状況に合わせて使い分ける必要があります。
PostgreSQLでテーブル削除
PostgreSQLでテーブル削除を削除する場合も、構文は同じです。
次のように記述しましょう。
DROP TABLE テーブル名;
ただし、テーブルに対してビューを作成している場合はエラーが発生し、テーブルの削除に失敗してしまいます。
このように、ビューを作成している場合などには、DROP TABLE文の実行に合わせて「CASCADE」の指定が必要です。
DROP TABLE テーブル名 CASCADE;
CASCADEを記述してテーブルを削除すると、 ビューも合わせて削除されます。
ビューも含めてすべて削除する際には、「CASCADE」を使いましょう!
DELETE文・TRUNCATE文との違いは?
DROP 以外にも DELETE や TRUNCATE があるけど、違いは何ですか?
それぞれの違いは「テーブルの削除可否」と「条件指定の可否」です!それぞれの使い方を見ていきましょう。
上記の質問のような疑問をもっている人もいるかもしれません。
似たような機能をもったクエリではありますが、それぞれの動きは異なります。
ここでは、DROP と DELETE 、 TRUNCATE の違いを確認していきましょう。
DELETE文
DELETE文は、テーブル内のデータ(行)を削除するクエリです。
実行するには次のように記述します。
DELETE FROM テーブル名;
WHERE句で条件を指定しない場合、テーブル内のすべてのデータが削除されます。
特定のデータだけを削除したい場合は、必ずWHERE句で条件指定をしましょう。
■WHERE句で条件を指定した場合のサンプル
DELETE FROM テーブル名 WHERE user_id = 1;
上記のクエリを実行した場合、user_id カラムの値が「1」であるデータだけが削除され、それ以外のデータは削除されません。
また、DROP TABLE文とは異なり、DELETE文ではテーブルは削除されないことも覚えておきましょう。
DELETE文は、条件を指定してデータの削除が可能!ただし、テーブル削除はできません。
【関連記事】
▶︎【サンプル有り】SQLでのデータ削除方法を知ろう!【DELETE/TRUNCATE】
TRUNCATE文
TRUNCATE文は、テーブル内のオブジェクトを完全に削除するクエリです。
実行するには次のように記述します。
TRUNCATE TABLE テーブル名;
TRUNCATE文はDELETE文とは異なり、WHERE句での条件指定ができません。
そのため、実行後のテーブル内のデータは必ずすべて削除されます。
DROP TABLE文とは異なり、TRUNCATE文ではテーブルは削除されません。
TRUNCATE文は、条件を指定してデータの削除ができません。また、テーブル削除もできません!
【関連記事】
▶︎SQL truncate 高速データ削除 deleteやdropとの違いとDBMS間の差異
▶︎MySQLのtruncateとは?テーブル削除と切り捨ての2つの機能について解説
DELETE文でテーブルの削除は可能?
前述したように、DELETE文はテーブル内のデータを削除するクエリです。
そのため、テーブル自体の削除はできないので注意しましょう。
テーブルを削除したい場合は DROP TABLE文 を使います。
テーブルの削除を複数・全て行える?
複数のテーブルをまとめて削除したいのですが、できますか?
はい、できます!そのやり方をここでは見ていきましょう。
テーブルを削除するために、1回1回 DROP TABLE文 を実行するのは、数が多い場合に大変です。
テーブルを複数まとめて削除したい場合は、次のようにテーブル名をカンマ区切りで記述します。
DROP TABLE テーブル名1, テーブル名2, テーブル名3, ...;
これでテーブルを複数削除できるので覚えておきましょう!
テーブル削除後に復活はできる?
テーブルを誤って消してしまった場合に、復活・復元させたい場合もあるかもしれません。
Oracleデータベースでは、Oracle10g から「ごみ箱」の機能が追加されたため、DROP TABLE文で削除後にごみ箱から復活させることができます。
ただし、PURGE句を付けて削除した場合は、ごみ箱からも完全に削除されているため復活できません。
復活させたい場合は、次のように記述します。
FLASHBACK TABLE テーブル名 TO BEFORE DROP;
これでテーブルの復活が可能です。
ちなみに、ゴミ箱にあるテーブル名を見るには、SQL*Plus で以下を実行することで確認できます。
SHOW RECYCLEBIN
まとめ
SQLでテーブルを削除する方法や構文ごとの違いについて解説しました。
テーブル削除のSQLクエリはオプションなどの指定もなく、比較的カンタンに実行可能です。
もしテーブルの削除のやり方で迷った場合は、ぜひ参考にしてください!
テーブルの制約も含めて削除:CASCADE CONSTRAINTS
テーブルを制約も含めて完全に削除:CASCADE CONSTRAINTS PURGE