SQLのdropについてまとめています。
dropはデータベースオブジェクトを削除するSQL
SQLのdropはデータベースオブジェクトを削除するSQLです。SQL92で定められた標準SQLです。
【関連記事】
▶SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
SQLが発行されると即実行され、もとに戻すことはできません。また、dropを実行する権限が必要になります。
データベース削除はdrop database
drop databaseは、データベースを削除するSQLです。
たとえば、以下のSQLは、データベースemployeesをdropします。
mysql> drop database employees; Query OK, 0 rows affected (0.21 sec)
データベース全てをdropしてしまう上、undoが効かないため、万が一の場合元に戻すにはバックアップデータが必要になります。また、MySQLなど、データベースによってはデータベース削除後も権限設定だけ残るケースもあります。
高速に全テーブルのデータ全件削除をおこなうために、drop databaseをおこなったあと、create database、テーブル作成DDLを実行するケースもあります。
【関連記事】
▶MySQLのデータベース削除は、drop database。復元するにはバックアップが必須
テーブル削除はdrop table
drop tableはテーブルを削除するSQLです。
下記のSQLは、テーブルdepartmentsを削除します。
drop table departments; Query OK, 0 rows affected (0.02 sec)
格納されているデータと、テーブル構造自体を削除します。ただし、foreign keyなど制約が設定されているテーブルは、drop実行時にエラーが出力されて失敗するケースがあります。
【関連記事】
▶MySQLのテーブル削除はdrop table 外部キー制約は一時的に無効化する
カラム削除は、alter table drop column
標準SQLではdrop columnという命令はなく、alter tableにdrop指定をすることで、カラム削除をおこないます。
以下は、MySQLで、employees2テーブルから、col2カラムを削除し、削除後のテーブル構造を確認するサンプルです。
mysql> alter table employees2 drop col2; mysql> desc employees2; +------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | emp_no | int | NO | PRI | NULL | | | birth_date | date | NO | | NULL | | | first_name | varchar(14) | NO | | NULL | | | last_name | varchar(16) | NO | | NULL | | | gender | enum('M','F') | NO | | NULL | | | hire_date | date | NO | | NULL | | +------------+---------------+------+-----+---------+-------+
【関連記事】
▶SQLのalterはデータベースオブジェクトを変更 テーブルカラム追加・変更が可能
ユーザ削除はdrop user
drop userはユーザを削除するSQLです。
以下の例は、MySQLにて、ユーザ一覧表示後にユーザuser0@localhostを削除し、対象ユーザが削除されたことを確認しています。
mysql> select user, host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | select_only | localhost | | user0 | localhost | +------------------+-----------+ 8 rows in set (0.02 sec) mysql> drop user user0@localhost; Query OK, 0 rows affected (0.24 sec) mysql> select user, host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | select_only | localhost | +------------------+-----------+ 7 rows in set (0.00 sec)
【関連記事】
▶MySQLのユーザ削除はdrop user 8.0以降は存在しないユーザの扱いが異なる
drop tableとtruncate、deleteの違い
drop tableは、データとテーブル構造をまるごと削除します。deleteは、データのみを削除します。複雑な条件指定や、undoが可能です。truncateは、無条件で対象テーブルのデータを削除します。条件指定やundoができませんが、高速に実行可能です。
【関連記事】
▶SQL truncate 高速データ削除 deleteやdropとの違いとDBMS間の差異
まとめ
- dropは、データベースオブジェクトを削除するSQLで、実行後にundoできない
- SQL92で定められている標準SQL
- データベース、テーブル、ユーザなどの削除が可能