【MySQL,SQLite】数字のみのカラム名、テーブル名は許されるのか?
【要するに】
SQLiteでは『'1'.'2'』のように、『(テーブル名).(カラム名)』のように
記述すればOK。
MySQLでは『`2`』のようにバッククォートで囲むだけでOK。
【実験した環境】
【動機】
外部キーのみで構成されたテーブルを作れないか? と、考えました。
セルの値だけではなく、テーブル名・カラム名も、正式な名前は別テーブルに
保管されている、という…。
つまり
【テーブル名:'1'】
2 (カラム名) | 3 (カラム名) |
---|---|
4 (セルの値) | 5 (セルの値) |
6 | 7 |
8 | 9 |
↑こんなテーブルです。
MySQL 4.1 リファレンスマニュアルには、
『数字だけで構成される名前は使用できない。』と書かれています。
が、5.xやSQLiteではどうなのかが分からなかったので、実験してみました。
【成功例】
※PHPから操作しました。
SQLite:
--テーブル作成
create table '1'(
'2' integer,
'3' integer
);--レコード挿入
insert into '1'(
'2',
'3'
)
values(4, 5);--SELECT文
select '1'.'2', '1'.'3'
from '1'
order by '1'.'3' desc;
MySQL:
--テーブル作成
create table `1`(
`2` int,
`3` int
);--レコード挿入
insert into `1`(
`2`,
`3`
)
values(4, 5);--SELECT文
select `2`, `3`
from `1`
order by `3` desc;
【疑問】
MySQLでは『`』で囲まなくてはならなかったのですが…、
この、『`』って何なんでしょう?
シングルクォーテーション『'』でもないし…。
(追記)
『`』は『逆クォート、バッククォート、アクサングラーブ』
などと読むようです。
→記号の読み色々
また、MySQLでは、バッククォートで囲めば予約語や数値のみで
あっても名前に使えるようです。
→Open Source WEB
SQLiteでは、バッククォートは受け付けてもらえずにエラーになりました。