MySQLで予約語をテーブル名・カラム名に使うと発生するエラーの原因と解決方法
MySQLでは、予約語(リザーブドワード)をそのままテーブル名やカラム名として使用すると、構文エラー(ERROR 1064)が発生します。この記事では、エラーが起こる具体的なケースと、バッククォートを使った解決方法をわかりやすく解説します。
エラーが発生するケース1:予約語をテーブル名として使用した場合
たとえば、MySQLのキーワードである「insert」をそのままテーブル名に使おうとすると、次のようにエラーになります。
mysql> create table insert
-> (
-> Id int
-> );
表示されるエラーメッセージは以下の通りです。
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 'insert ( Id int )' at line 1
このエラーは、「insert」がMySQLにおいてINSERT文を意味する予約語(キーワード)であることが原因です。MySQLはこれをテーブル名ではなくSQL構文の一部として解釈しようとするため、構文エラーとなります。
エラーが発生するケース2:予約語をカラム名として使用した場合
同様に、カラム名に予約語を使ってもエラーが発生します。次の例では、「Add」というカラムを作成しようとしています。
mysql> create table Customers
-> (
-> Add int
-> );
表示されるエラーメッセージは以下の通りです。
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 'Add int )' at line 3
こちらも「Add」がMySQLの予約語であるために発生したエラーです。
MySQLの主な予約語の一覧
この種のエラーを避けるためには、MySQLの予約語を把握しておくことが重要です。代表的な予約語には以下のようなものがあります。
INSERT ADD IS KEY LIKE ORDER GROUP SELECT WHERE TABLE など
予約語の完全な一覧は、MySQL公式ドキュメントのキーワードページで確認できます。
参考(MySQL公式):https://dev.mysql.com/doc/refman/5.7/en/keywords.html
解決方法:バッククォート(`)で囲む
予約語をテーブル名やカラム名としてどうしても使いたい場合は、バッククォート(`` ` ``)で囲むことで解決できます。バッククォートで囲まれた識別子は、予約語であっても正しく名前として扱われます。
ポイント: 原則として、予約語をテーブル名やカラム名にそのまま使用することはできません。しかし、バッククォートで囲めば文法的に正しい記述とみなされます。
記述例
create table `insert`
テーブル名とカラム名の両方にバッククォートを使った実行例
mysql> create table `Insert`
-> (
-> `Add` int
-> );
Query OK, 0 rows affected (0.59 sec)
このようにバッククォートを使用すれば、予約語を含む名前でもエラーが発生せず、正常にテーブルを作成できます。
まとめ
- MySQLの予約語をテーブル名やカラム名にそのまま使うと、ERROR 1064(構文エラー)が発生する。
- エラーを回避するには、予約語をバッククォート(`` ` ``)で囲む。
- そもそもの設計としては、予約語と重複しない名前を付けるのがベストプラクティス。
-
MySQLで「index」という列名を作成すると構文エラーになる原因と解決方法
「index」が予約語であることが原因MySQLでは「index」は予約語(reserved word)として登録されているため、そのまま列名として使用することはできません。どうしても使用したい場合は、列名をバッククォート(`)で囲む必要があります。エラーが発生する例予約語をバッククォートなしで列名に指定すると、次のような構文エラーが発生します。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PR
-
MySQLでテーブル名に「group」を使うと構文エラーになる理由とバッククォートによる回避方法
MySQLにおいて「group」は予約語(リザーブドキーワード)です。そのため、テーブル名としてそのまま使用すると構文エラーが発生します。このエラーを回避するには、テーブル名「group」をバッククォート(`)で囲む必要があります。テーブルの作成例まず、バッククォートで囲んだテーブル名を使ってテーブルを作成してみましょう。mysql> create table `group` -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> );Query