MySQLで予約語と完全一致するカラムに対して流すSQLの注意点

2020年7月17日

今回は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に変えたいとすると、

というSQLを流すべきですが、これではうまくいきません。
ERROR 1064 (42000): You have an error in your SQL syntax;
というエラーが出るかと思います。

正解を言ってしまうと、例えテーブルを結合していなくても明示的にテーブル名を指定して

とする必要があります。

このようにすればPRICEテーブルのデータが

 
ID DEFAULT
1 400
2 300
3 350

となり、やりたいことができるかと思います。
UPDATE文に限らず、他のSQLも同様です。

終わりに

今回はMySQLで予約語と完全一致するカラムに対して流すSQLの注意点について書きました。

この記事が参考になれば幸いでございます。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






MySQL

Posted by ちこ