Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
さて、バッククォート(`) は入力しなかったのに、 SHOW の表示に含まれていた。 今回は、このバッククォートが何なのかを調べよう。
オンラインマニュアルの索引 を見てみよう。もちろん、英文の方である。
最初に Symbols、つまり「記号」があるので、 この中からバッククォートを探すのだが、ちょっと判別しづらい。 でも、何とか `, Database, Table, Index, Column, and Alias Names を見つけることができた。
日本語のページも存在して、英語と日本語のページが現状ではきちんとは 対応していないことが分かるだろう。
このページは、 データベース名、テーブル名、インデックス名、カラム名、エイリアス名 について記述している。 この中で、バッククォートについて説明してある個所を探すと、
The identifier quote character is the backtick (‘`’):
識別子が予約語である場合や、 識別子に特殊文字が含まれている場合は、 引用符として使用したバッククォート(「`」)文字で その識別子を必ず囲む必要があります。
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
の個所がある。
なるほど、データベース名、テーブル名、カラム名などに 予約語をどうしても使いたい場合には、 バッククォートで囲めば良いらしい。
「特殊文字が含まれている‥」部分は英語には今はない。 過去にあったかどうかも知らない。
それで、最も信頼できると言われている参考書である "MySQL, Second Edition", by Paul DuBois, Sams Publishing を開いてみた。 (現在は、 MySQL,3rd Edition になっているが、まだ私は揃えていない。)
それの101ページには、
you can include other characters within a name or use reserved words by enclosing the name within backtick('`') characters.
という一節が出てくる。要するに、これは、日本語マニュアルに一致する。
予約語と一致するデータベース名
では、さっそく、予約語と一致するデータベース名について、 上記の通りかどうか調べてみよう。
mysql> CREATE DATABASE CREATE; 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 'CREATE' at line 1 mysql>
予約語と一致するデータベース名を指定すると、ちゃんとエラーになる。 でも、
mysql> CREATE DATABASE `CREATE`; Query OK, 1 row affected (0.00 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | CREATE | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql>
という訳で、バッククォートで囲むと、予約語と一致するデータベースも 作成できる。
数字だけのデータベース名
数字だけのデータベース名が作れるだろうか?
mysql> CREATE DATABASE 2005; 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 '2005' at line 1 mysql>
となって駄目なのである。しかし、
mysql> CREATE DATABASE `2005`; Query OK, 1 row affected (0.00 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | 2005 | | CREATE | | mysql | | test | +--------------------+ 5 rows in set (0.08 sec) mysql>
となり、バッククォートで囲むと、数字だけのデータベース名が可能となる。
ということで、バッククォートで囲むと、 今までエラーになっていたデータベース名が可能になるようだ。
戻る:SHOW CREATE DATABASEの出力中の`は何だろう
フィードバック:
There is no comment.