🔖
【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