MySQLで予約語と完全一致するカラムに対して流すSQLの注意点
今回はMySQLで予約語と完全一致するカラムに対して流すSQLの注意点についてご紹介いたします。
MySQLで予約語と完全一致するカラムに対して流すSQLの注意点
特殊な書き方をすれば、MySQLでテーブルを作成したときに”SELECT”や”DEFAULT”などの予約語と完全一致するカラムを作成することができます。(その書き方については今回の趣旨とは外れるので省きます。)
予約語をカラムとして登録した場合、テーブルを作成するときだけでなくSQLを流すときにも書き方に工夫が必要です。
(最初に結論を言ってしまうと、テーブル名を省略せずに必ず”テーブル名.カラム名”でSQLを流す必要があります。)
例として、テーブル名が
PRICE、
カラムとして
ID(INT)
DEFAULT(INT)
を持っているとします。(あまり実践的なテーブルではありませんね。PRICEを別テーブルにする意味は相当特殊な状況以外ないかと思います)
Dockerを使ってMySQLの環境を作ろうとしたのですが、MySQLの環境は作れそうなもののテーブルを作るのが面倒だったので実際にSQLを流さずに説明いたします。
もしかしたら同じシチュエーションでは動かないかもしれません。
しかし意図は伝わるように書きます。
例えば、
PRICEテーブルで
ID | DEFAULT |
---|---|
1 | 200 |
2 | 300 |
3 | 350 |
というデータがあるとします。
このデータにおいて、IDが1のDEFAULTを400に変えたいとすると、
1 |
UPDATE PRICE SET DEFAULT=1 WHERE ID=1 |
というSQLを流すべきですが、これではうまくいきません。
ERROR 1064 (42000): You have an error in your SQL syntax;
というエラーが出るかと思います。
正解を言ってしまうと、例えテーブルを結合していなくても明示的にテーブル名を指定して
1 |
UPDATE PRICE SET PRICE.DEFAULT=1 WHERE ID=1 |
とする必要があります。
このようにすればPRICEテーブルのデータが
ID | DEFAULT |
---|---|
1 | 400 |
2 | 300 |
3 | 350 |
となり、やりたいことができるかと思います。
UPDATE文に限らず、他のSQLも同様です。
終わりに
今回はMySQLで予約語と完全一致するカラムに対して流すSQLの注意点について書きました。
この記事が参考になれば幸いでございます。
ディスカッション
コメント一覧
まだ、コメントがありません