SQLでテーブルを削除したい場合に用いるのが DROP TABLE です。
DROP TABLE (テーブル名);
構文自体は非常に簡単なので、ほとんど説明不要なのですが、実はSQL初心者の方にとっては陥りがちな罠が潜んでいるので要注意です。
データベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。
SQL文の基本ルール(大文字/小文字の区別、コメントの付与など)を始めに学んでおきたい方は以下の記事を先にご覧ください。
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を実行してしまったら、指定したテーブルを復活させるには以下のような手順が必要になります。
パターン①の場合は非常に簡単です(再度作成しなおせばいいだけです)。
ただし、実際に稼働しているシステムにおいてはレコードが存在していないテーブルなどはほとんどありません。したがって、パターン②の場合がほとんどです。
パターン②の場合では、格納されていたデータを再登録する手順が非常に困難。大抵の場合、誤ってDROP TABLE してしまようなシーンでは「どのようなレコードが入っていたか?」を知りうる手段がありません。
また、バックアップから復元するにしても、テーブル単位での復元には非常に膨大な時間と労力を要します。
バックアップはデータベース単位で行われのが普通。また、バックアップ時点でのテーブルを再現することはできても、バックアップ取得時点からの更新を反映するには、さらにログから更新情報を取得する手間も必要になります。
そのためSQL初心者でなくても、DROP TABLE を使う際には最新の注意を払うように心がけましょう。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。