MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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」など別の名前を選ぶことをおすすめします。

  1. 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

  2. MySQL 8で「rank」を列名として使える?予約語エラーの原因とバッククォートでの解決法

    MySQLでは、RANKはバージョン8.0.2から定義されている予約語(reserved word)です。そのため、「rank」をそのまま列名として使用することはできず、SQL構文エラーが発生します。この問題を回避するには、列名をバッククォート(`)で囲む必要があります。本記事では、実際にエラーが発生する例と、バッククォートを使った正しいテーブル作成・データ操作の手順を解説します。1. 動作環境の確認まず、使用しているMySQLのバージョンを確認しましょう。ここではMySQL 8.0.12を使用しています。mysql> select version(); +-----------+ |