Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL 8 で簡単に予約語を調べる方法!

よくテーブルデザインをする際、あれ?これって予約語じゃね?って時ありませんか? もっと細かくみたい場合、WEBで調べるとか・・・ちょっとめんどくさいですよね。

いままで全然、知らなかったのですが、MySQL 8.0以降では、予約語をこんなに簡単になりました。

これは簡単!information_schema.KEYWORDSテーブルに予約語が格納されております!!

  • information_schema.KEYWORDS
SELECT * FROM information_schema.KEYWORDS LIMIT 10;
----
+------------+----------+
| WORD       | RESERVED |
+------------+----------+
| ACCESSIBLE |        1 |
| ACCOUNT    |        0 |
| ACTION     |        0 |
| ADD        |        1 |
| ADMIN      |        1 |
| AFTER      |        0 |
| AGAINST    |        0 |
| AGGREGATE  |        0 |
| ALGORITHM  |        0 |
| ALL        |        1 |
+------------+----------+
  • 上記のテーブルにて、RESERVEDに1がついているものが予約語です
SELECT 'test' AS AGAINST ;
+---------+
| AGAINST |
+---------+
| test    |
+---------+
1 row in set (0.00 sec)

mysql> select 'test' AS ACCESSIBLE;
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 'ACCESSIBLE' at line 1

*例外として、たとえ予約後であっととしても、ダッシュ(`)で括ればエラーにはなりません。。が、面倒になるので、予約語を使ったテーブル設計は可能な限り避けましょう

mysql> SELECT 'test' AS FROM;
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 'FROM' at line 1
mysql> SELECT 'test' AS `FROM`;
+------+
| FROM |
+------+
| test |
+------+
1 row in set (0.00 sec)

f:id:hit10231023:20180309104332j:plain