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

MySQLでテーブル名に「match」を指定するとエラーになる?予約語をバッククォートで囲む正しい対処法

MySQLでは「match」は予約語(reserved word)として登録されているため、テーブル名としてそのまま使用すると構文エラーが発生します。注意したいのは、シングルクォート(')で囲んでも問題は解決しないという点です。予約語をテーブル名などに使用する場合は、バッククォート(`)で囲む必要があります。

バッククォートなしで発生するエラー

まず、予約語「match」をそのまま使用した場合にどのようなエラーが出るのか確認してみましょう。

mysql> select *from match;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match' at line 1

このように「ERROR 1064」の構文エラーが発生します。SQLの構文としては「match」がキーワードと判断されるため、テーブル名として認識されないのが原因です。

バッククォートで囲んでテーブルを作成する

それでは、実際にテーブルを作成し、予約語「match」をバッククォートで囲むことでエラーを回避してみましょう。

mysql> create table `match`
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PlayerName varchar(20)
);
Query OK, 0 rows affected (0.62 sec)

次に、INSERT文でレコードを挿入します。予約語を使用する箇所は、すべてのSQL文でバッククォートで囲む点に注意してください。

mysql> insert into `match`(PlayerName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into `match`(PlayerName) values('Bob');
Query OK, 1 row affected (0.16 sec)
mysql> insert into `match`(PlayerName) values('David');
Query OK, 1 row affected (0.24 sec)
mysql> insert into `match`(PlayerName) values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into `match`(PlayerName) values('Sam');
Query OK, 1 row affected (0.14 sec)

SELECT文でレコードを確認する

SELECT文ですべてのレコードを表示します。ここでも「match」はバッククォートで囲みます。

mysql> select *from `match`;

実行結果は以下の通りです。

+----+------------+
| Id | PlayerName |
+----+------------+
|  1 | Chris      |
|  2 | Bob        |
|  3 | David      |
|  4 | Mike       |
|  5 | Sam        |
+----+------------+
5 rows in set (0.00 sec)

このように、MySQLで予約語をテーブル名やカラム名として使用する場合は、必ずバッククォート(`)で囲むことでエラーを回避できます。ただし、可読性や保守性の面を考えると、そもそも予約語と重複しない名前(例:「matches」「game_match」など)を付けることが望ましいでしょう。

  1. MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)

    MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab

  2. MySQLでテーブルAとBを比較し、Bに存在しないデータをテーブルCに挿入する方法

    MySQL:テーブルAとBを比較し、Bに存在しないデータをCへ挿入する方法テーブルAのデータとテーブルBを比較し、Bに存在しないレコードだけをテーブルCに挿入したい場合は、LEFT JOIN(左外部結合)を使うのが最もシンプルで確実な方法です。ここでは、3つのテーブル(demo20=テーブルA、demo21=テーブルB、demo22=テーブルC)を使って、具体的な手順を順番に解説します。ステップ1:テーブルA(demo20)を作成するまず、比較元となる最初のテーブルを作成します。mysql> create table demo20 −> ( −> id