新鮮

頑張らないために頑張る

SPONSORED LINK

MySQL勉強 予約語の扱い

MySQL予約語の扱いを確認してみる。予約語とは "from" のようにプロダクトの中であらかじめ意味をもつ単語のことで「from テーブル」のようなテーブルは作れない。select * from from; とかになってしまうので。具体的な予約語MySQL マニュアル に詳しく書かれている。

試してみる

mysql> create table interval (begin int, end 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 'interval (begin int, end int)' at line 1

予約語(interval)はテーブル名やカラム名に使えない。だが、バッククオートで囲むと予約語がテーブル名などで使える。

mysql> create table `interval` (begin int, end int);
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| interval       |
+----------------+

データを入れるときは、バッククオートで囲うかデータベース名を含めて指定する。

mysql> insert into `interval`(begin,end) values(1,2);
mysql> insert into mydb.interval(begin,end) values(2,2);
mysql> select * from `interval`;
+-------+------+
| begin | end  |
+-------+------+
|     1 |    2 |
|     2 |    2 |
+-------+------+

ちなみに、sql-mode = ANSI_QUOTES のときはダブルクオートでも使える。

mysql> set session sql_mode='ANSI_QUOTES';
mysql> select * from "interval";
+-------+------+
| begin | end  |
+-------+------+
|     1 |    2 |
|     2 |    2 |
+-------+------+

試験用チェックリスト

  • テーブル名で予約語は使えないがバッククオートで囲むと使える
  • sql-mode = ANSI_QUOTES ではダブルクオートをバッククオートと解釈する