ここでは、MySQL で予約語として定義されている文字列を、テーブル名やカラム名に使用する方法を掲載しています。
スポンサーリンク
誰かが作った注文テーブル ( order ) があるものとします。あなたが作ったのではなく誰かがその名前でテーブルを作りました。あなたは注文テーブルのデータを確認するためにクエリを発行します。
select * from order
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 ・・・
エラーとなりました。なぜでしょう。
これは、( order ) が MySQL の予約語だからです。テーブル名を変更することができればよいのですが、できない場合には以下のように予約語を MySQL のクォート文字であるバッククォート ( ` ) で囲めば正常に実行することができます。
予約語をテーブル名やカラム名にして良いことはないと個人的には思います。
select * from `order`
もちろん、注文テーブル ( order ) を作った人が create table 文を発行したときも、バッククォートで囲んで発行しています。
MySQL の予約語
MySQL の予約語一覧は 「 MySQL リファレンスマニュアル 予約語 」 で確認することができます。MySQL のバージョンアップで予約語が追加されることもあります。
リンク先より一部引用
表 9.3 MySQL 5.5 と比較した MySQL 5.6 の新しい予約語
GET IO_AFTER_GTIDS IO_BEFORE_GTIDS MASTER_BIND PARTITION MySQL では、以前に多くの人々が使用していたので、一部のキーワードを引用符で囲まない識別子として使用することを許可しています。次の一覧に例を示します。
- ACTION
- BIT
- DATE
- ENUM
- NO
- TEXT
- TIME
- TIMESTAMP
例外を認めないとデータベースのバージョンアップに伴う利用者側の確認コストや修正コストが増えます。それでもシェアを確保したい MySQL 開発側が互換性の点で妥協できるのはここまでということですね。微妙な駆け引きです。もちろん開発者側は例外は認めたくないはずだと思います。例外が多くなってくると利用者側も開発者側も不幸になりますので。