13.1.21 DROP DATABASE 構文


DROP DATABASE は、データベース内のすべてのテーブルを削除したあと、そのデータベースを削除します。このステートメントには十分に注意してください。DROP DATABASE を使用するには、そのデータベースに対する DROP 権限が必要です。DROP SCHEMADROP DATABASE のシノニムです。


データベースが削除されても、そのデータベースに対するユーザー権限が自動的に削除されることはありませんセクション13.7.1.4「GRANT 構文」を参照してください。

IF EXISTS は、データベースが存在しない場合にエラーが発生しないようにするために使用されます。

デフォルトデータベースが削除されると、そのデフォルトデータベースは設定解除されます (DATABASE() 関数が NULL を返します)。

シンボリックリンクされたデータベースに対して DROP DATABASE を使用した場合は、そのリンクと元のデータベースの両方が削除されます。

DROP DATABASE は、削除されたテーブルの数を返します。これは、削除された .frm ファイルの数に対応します。

DROP DATABASE ステートメントは、MySQL 自体が通常の動作中に作成する可能性のあるファイルとディレクトリを特定のデータベースディレクトリから削除します。

  • 次の拡張子を持つすべてのファイル。

    .db .frm .ibd .ndb
  • db.opt ファイル (存在する場合)。

今一覧表示されたファイルを MySQL が削除したあとに、このデータベースディレクトリ内にほかのファイルやディレクトリが残っている場合は、そのデータベースディレクトリを削除できません。この場合は、残っているすべてのファイルまたはディレクトリを手動で削除してから、再度 DROP DATABASE ステートメントを発行する必要があります。

データベースを削除しても、そのデータベース内に作成されたどの TEMPORARY テーブルも削除されません。TEMPORARY テーブルは、それらを作成したセッションが終了すると自動的に削除されます。一時テーブルを参照してください。

データベースは mysqladmin でも削除できます。セクション4.5.2「mysqladmin — MySQL サーバーの管理を行うクライアント」を参照してください。

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by Christopher Schultz on February 26, 2004
Please note that when dropping databases containing InnoDB tables in version 4.0.18 and beyond, you might get a FK violation.

It sounds bizarre, but DROP DATABASE seemingly drops each table, first, in arbitrary order. Since the ordering is arbitrary, it may drop them in the 'wrong' order. In this case, you'll get the message:

error: 'Cannot delete or update a parent row: a foreign key constraint fails'

... and half of your tables will be gone, the other half remaining. You can repeatedly execute "DROP DATABASE" commands and each time (at least for me), MySQL gets closer to an empty database, at which point, the database itself is dropped.

Here's a mailing list thread covering the phenomenon and a few responses from someone who sounds like they're in a position to know about these things.


I marked this comment as an "Explanation" because I cannot mark it as a bug :(. I feel that there needs to be a way to drop a database without manually dropping all the tables inside it, first. MySQL should at least drop the tables in the reverse order in which they were added to the database, to avoid such behavior.

  Posted by on April 5, 2004
before dropping a database fixes the foreign key constraint problem (as introduced in 4.0.18) for me

  Posted by Justin Vassallo on May 10, 2005
Do note that when a db is dropped, the corresponding db structure is deleted. However, the data itself, which resides in a common file 'ibdata', is not deleted. In some cases, this might constitute a security hazard.
This is not a bug but i think that it would be a good idea that 'drop database' actually removes the data from ibdata.
  Posted by Jonathan Watt on May 28, 2009
To drop all tables without actually dropping the database (fill out the first line as appropriate):

$MYSQL -BNe "show tables" | awk '{print "set foreign_key_checks=0; drop table `" $1 "`;"}' | $MYSQL
unset MYSQL

This can be useful if all you really need to do is empty the database in order to restore a backup made by mysqldump, but you couldn't use --add-drop-database because you don't have CREATE DATABASE privileges on the command line (e.g. you're on shared hosting). mysqldump adds DROP TABLE by default, but if tables may have been added or renamed since the time of your backup (e.g. by some sort of update process that you're trying to revert from), failing to drop those tables will likely cause serious headaches later on.

Of course this raises the question of why MySQL doesn't support "DROP TABLE *;" (in which case mysqldump could just insert that)?
  Posted by Gary Aitken on June 20, 2012
Note that mysql assumes any subdirectory in its data storage directory is a database. If you have mistakenly created a subdirectory there, "show databases" will indicate that directory as a known database even though you have never added a database of that name. Attempting to remove it will fail if you have placed anything in that directory. To remove it, copy / move the files someplace safe, then issue the drop database command.
Sign Up Login You must be logged in to post a comment.