MySQLで列名に「desc」を使えないのはなぜ?予約語の正しい扱い方とバッククォートでの回避方法
MySQLで列名「desc」が使用できない理由
MySQLにおいて「desc」は予約語(reserved word)として登録されているため、そのまま列名として使用することはできません。これは「desc」がORDER BY句などで降順(descending)を指定するキーワードとして使われているためです。
ただし、どうしても列名を「desc」にしたい場合は、バッククォート(` `)で囲むことで使用可能になります。バッククォートは、テーブル名や列名などの識別子を明示的に区切るための記法です。
バッククォートを使ったテーブル作成例
それでは、実際に「desc」という列名を持つテーブルを作成してみましょう。
テーブルの作成
以下のように、CREATE TABLE文で「desc」列をバッククォートで囲んで定義します。
mysql> create table useOfDescColumnNameDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> `desc` varchar(200) default 'GOOD'
-> );
Query OK, 0 rows affected (0.60 sec)このように、「`desc` varchar(200) default 'GOOD'」と記述することで、予約語である「desc」を問題なく列名として設定できます。
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into useOfDescColumnNameDemo(Name) values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Bob');
Query OK, 1 row affected (0.16 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into useOfDescColumnNameDemo(Name) values('Sam');
Query OK, 1 row affected (0.13 sec)レコードの確認
SELECT文ですべてのレコードを表示して確認してみましょう。
mysql> select *from useOfDescColumnNameDemo;
実行結果は以下の通りです。
+----+-------+------+ | Id | Name | desc | +----+-------+------+ | 1 | John | GOOD | | 2 | Bob | GOOD | | 3 | Carol | GOOD | | 4 | Sam | GOOD | +----+-------+------+ 4 rows in set (0.00 sec)
SELECT文でもバッククォートを使用する
データを取得する際も、「desc」列を参照するにはバッククォートが必要です。以下のようなSELECT文を実行します。
mysql> select `desc` from useOfDescColumnNameDemo;
実行結果は以下の通りです。
+------+ | desc | +------+ | GOOD | | GOOD | | GOOD | | GOOD | +------+ 4 rows in set (0.00 sec)
まとめ
「desc」はMySQLの予約語であるため、列名としてそのまま使うことはできませんが、バッククォート(` `)で囲むことで回避できます。ただし、予約語を列名に使うとSQLの可読性が低下し、記述漏れによるエラーの原因にもなるため、可能であれば「description」など別の名前を選ぶことをおすすめします。
-
MySQLクエリで「LIKE concat()」を使用することはできる?
はい、MySQLではLIKE句とconcat()関数を組み合わせて使用することが可能です。concat()関数で動的にパターン文字列を生成し、それをLIKE句の検索条件として利用できます。実際にサンプルを使って手順を見ていきましょう。まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(50) ); Query OK, 0 rows affected (0.63 sec)次に、insertコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable values(Jo
-
MySQL 8で「rank」を列名として使える?予約語エラーの原因とバッククォートでの解決法
MySQLでは、RANKはバージョン8.0.2から定義されている予約語(reserved word)です。そのため、「rank」をそのまま列名として使用することはできず、SQL構文エラーが発生します。この問題を回避するには、列名をバッククォート(`)で囲む必要があります。本記事では、実際にエラーが発生する例と、バッククォートを使った正しいテーブル作成・データ操作の手順を解説します。1. 動作環境の確認まず、使用しているMySQLのバージョンを確認しましょう。ここではMySQL 8.0.12を使用しています。mysql> select version(); +-----------+ |