【SQL】DROP TABLE(テーブルの削除)を1分でわかりやすく解説

Database

SQLでテーブルを削除したい場合に用いるのが DROP TABLE です。

DROP TABLE (テーブル名);

構文自体は非常に簡単なので、ほとんど説明不要なのですが、実はSQL初心者の方にとっては陥りがちな罠が潜んでいるので要注意です。

このページで学べる内容
  • DROP TABLE の構文ルール
  • DROP TABLE の注意点

データベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

DROP TABLE:テーブルの削除

"DROP TABLE" はテーブルを削除する場合に用いるSQL文です。

構文ルールとサンプルコードは以下の通り。

構文ルール

DROP TABLE (テーブル名);

サンプルコード

--テーブル削除実行前
show tables;

/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| memberlist_b       |←削除対象
| pointlist          |
| subpointlist       |
+--------------------+
*/

-- テーブル削除実行
DROP TABLE memberlist_b;

SHOW TABLES;
/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| pointlist          |
| subpointlist       |
+--------------------+
*/

ご覧のように、指定したテーブル「memberlist_b」が削除されました。

オプション:IF EXISTS

オプションで「IF EXISTS」というキーワードを付与することで「指定したテーブルが存在する場合のみテーブルを削除する」という処理を行うことが可能です。

構文ルール

DROP TABLE IF EXISTS(テーブル名);

サンプルコード

--テーブル削除実行前
show tables;

/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| memberlist_b       |←削除対象
| pointlist          |
| subpointlist       |
+--------------------+
*/

-- テーブル削除実行
DROP TABLE IF EXISTS memberlist_b;

SHOW TABLES;
/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| pointlist          |
| subpointlist       |
+--------------------+
*/

-- テーブル削除再度実行
DROP TABLE IF EXISTS memberlist_b;

SHOW TABLES;
/*(対象のテーブルが存在しないため何も変化はない)
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| pointlist          |
| subpointlist       |
+--------------------+
*/

利用するDBMSによっては指定したテーブルが存在しない場合ワーニングやエラーが発生する場合もあります。

DROP TABLE の注意点

DROP TABLE は改めて説明しますが、指定したテーブルの削除処理を行います。つまり、既に格納されているレコードも含めてテーブルそのものが消え去るという意味です。

稀に、本来は「テーブルに格納されているレコードだけを削除したい」だけなのに誤ってテーブルごと削除してしまうパターンが存在します。

レコードを削除したいだけであれば、本来利用すべきはDELETE文です。

そして、DROP TABLE文の怖さは基本的に元に戻すことができない(=難しい)という点です。

誤って、DROP TABLEを実行してしまったら、指定したテーブルを復活させるには以下のような手順が必要になります。

誤って削除してしまったテーブルの復旧方法
  • パターン①(レコード0件のテーブルを削除した場合
    CREATE TABLE文でテーブルを再度作成する
    ・バックアップから復元
  • パターン②(レコードが1件以上のテーブルを削除した場合
    CREATE TABLE文INSERT文(格納されていたデータを再登録)
    ・バックアップから復元

パターン①の場合は非常に簡単です(再度作成しなおせばいいだけです)。

ただし、実際に稼働しているシステムにおいてはレコードが存在していないテーブルなどはほとんどありません。したがって、パターン②の場合がほとんどです。

パターン②の場合では、格納されていたデータを再登録する手順が非常に困難。大抵の場合、誤ってDROP TABLE してしまようなシーンでは「どのようなレコードが入っていたか?」を知りうる手段がありません。

また、バックアップから復元するにしても、テーブル単位での復元には非常に膨大な時間と労力を要します。

バックアップはデータベース単位で行われのが普通。また、バックアップ時点でのテーブルを再現することはできても、バックアップ取得時点からの更新を反映するには、さらにログから更新情報を取得する手間も必要になります。

そのためSQL初心者でなくても、DROP TABLE を使う際には最新の注意を払うように心がけましょう。

DROP TABLEのまとめ
  • "DROP TABLE" はテーブルを削除する場合に用いる
  • オプションで「IF EXISTS」というキーワードを付与することで「指定したテーブルが存在する場合のみテーブルを削除する」という処理を行うことが可能
  • 一度削除したテーブルを削除するのは非常に困難→DROP TABLE を使う際には最新の注意を払う必要がある
--テーブル削除実行前
show tables;

/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| memberlist_b       |←削除対象
| pointlist          |
| subpointlist       |
+--------------------+
*/

-- テーブル削除実行
DROP TABLE memberlist_b;

SHOW TABLES;
/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| pointlist          |
| subpointlist       |
+--------------------+
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

タイトルとURLをコピーしました