🔖

【MySQL】ハイフン付きデータベース名を削除する方法

に公開

はじめに

MySQLで不要になったデータベースを削除しようとして、
次のようなコマンドを実行したところ、エラーになりました。

DROP DATABASE sapmle-project_db;

一見正しそうに見えるこのコマンドですが、
実は「ハイフン(-)」を含むデータベース名には注意が必要です。

今回はこのエラーを通じて学んだ
「バッククォート(`)で囲む必要がある理由」 について、備忘録として整理しておきます。

エラー内容

以下のようなエラーが表示されました。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-project_db' at line 1

このエラーは、sapmle-project_db の中の ハイフン(-)
MySQLが演算子として解釈してしまっていることが原因です。

解決策:バッククォート(`)で囲む

MySQLでは、データベース名やテーブル名に特殊文字(ハイフン、スペースなど)が含まれる場合
バッククォート(`)で囲む必要があります。

DROP DATABASE `sapmle-project_db`;

このように書くことで、MySQLはこれを1つの識別子(データベース名)として正しく認識します。

バッククォート(`)の入力方法

バッククォート(`)は、日本語キーボードでは Shift + @キー で入力できます。
(@キーは「P」の右隣にあります)

いつ必要になる?

以下のようなケースでは、バッククォートで囲む必要があります。

ケース 解説
名前にハイフンが含まれている sample-project - が演算子と誤解される
スペースが含まれている user data 複数単語として誤認される
予約語と同じ名前 select SQL構文のキーワードと衝突する
数字で始まる 123table 構文上エラーになる可能性

まとめ

  • MySQLでは、特殊な名前のデータベースやテーブルはバッククォートで囲む必要がある
  • DROP DATABASE などで名前にハイフンが含まれていると、そのままでは構文エラーになる

おわりに

今回のエラーは、ほんの小さな記号の違いが原因でしたが、
意外とつまずきやすいポイントだと感じました。

自分自身、MySQLはある程度使ってきたつもりでしたが、
「ハイフン付きのデータベース名はバッククォートが必要」というルールは今回初めて知りました。

同様のケースに直面された方の参考になれば幸いです。

Discussion