MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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(構文エラー)が発生する。
  • エラーを回避するには、予約語をバッククォート(`` ` ``)で囲む。
  • そもそもの設計としては、予約語と重複しない名前を付けるのがベストプラクティス。
  1. MySQLで「index」という列名を作成すると構文エラーになる原因と解決方法

    「index」が予約語であることが原因MySQLでは「index」は予約語(reserved word)として登録されているため、そのまま列名として使用することはできません。どうしても使用したい場合は、列名をバッククォート(`)で囲む必要があります。エラーが発生する例予約語をバッククォートなしで列名に指定すると、次のような構文エラーが発生します。mysql> create table DemoTable    -> (    -> Id int NOT NULL AUTO_INCREMENT PR

  2. MySQLでテーブル名に「group」を使うと構文エラーになる理由とバッククォートによる回避方法

    MySQLにおいて「group」は予約語(リザーブドキーワード)です。そのため、テーブル名としてそのまま使用すると構文エラーが発生します。このエラーを回避するには、テーブル名「group」をバッククォート(`)で囲む必要があります。テーブルの作成例まず、バッククォートで囲んだテーブル名を使ってテーブルを作成してみましょう。mysql> create table `group` -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> );Query