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

MySQLでデータベース名やテーブル名をシングルクォートで囲むと動作しない?バッククォートの正しい使い方を解説

はじめに:なぜシングルクォートでは動かないのか

MySQLでは、データベース名やテーブル名といった「識別子」を囲む場合、シングルクォート(')ではなくバッククォート(`)を使用する必要があります。シングルクォートは文字列リテラル(値)を囲むためのものであり、識別子には利用できません。予約語や特殊文字を含む名前を安全に扱うためにも、識別子はバッククォートで囲むのが基本です。

データベース名とテーブル名の両方をバッククォートで囲んだ、UPDATE文の基本構文は以下の通りです。

UPDATE `yourDatabaseName`.`yourTableName`
SET yourColumnName1 = yourColumnName1 + 1
WHERE yourColumnName2 = 'yourValue';

検証用テーブルの作成

それでは、実際に構文を確認してみましょう。まずはテスト用のテーブルを作成します。以下のクエリを実行してください。

mysql> use test;
Database changed
mysql> create table Add1Demo
    -> (
    -> Id varchar(10),
    -> Value int
    -> );
Query OK, 0 rows affected (1.19 sec)

サンプルデータの挿入

次に、INSERT文を使ってテーブルにレコードを挿入していきます。

mysql> insert into Add1Demo values('1',780);
Query OK, 1 row affected (0.17 sec)
mysql> insert into Add1Demo values('2',1001);
Query OK, 1 row affected (0.18 sec)
mysql> insert into Add1Demo values('3',1654);
Query OK, 1 row affected (0.15 sec)
mysql> insert into Add1Demo values('4',3999);
Query OK, 1 row affected (0.09 sec)
mysql> insert into Add1Demo values('5',5999);
Query OK, 1 row affected (0.10 sec)
mysql> insert into Add1Demo values('6',799);
Query OK, 1 row affected (0.08 sec)
mysql> insert into Add1Demo values('8',899);
Query OK, 1 row affected (0.11 sec)

挿入したデータの確認

SELECT文ですべてのレコードを表示し、データが正しく登録されているか確認しましょう。

mysql> select *from Add1Demo;

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

+------+-------+
| Id   | Value |
+------+-------+
| 1    |   780 |
| 2    |  1001 |
| 3    |  1654 |
| 4    |  3999 |
| 5    |  5999 |
| 6    |   799 |
| 8    |   899 |
+------+-------+
7 rows in set (0.00 sec)

バッククォートを使ったUPDATE文の実行

ここからが本題です。データベース名「test」とテーブル名「Add1Demo」をバッククォートで囲んでUPDATE文を実行します。このとき、データベース名やテーブル名にシングルクォートを使わないよう注意してください。以下の例では、Idが「6」のレコードのValueフィールドに1を加算しています。

mysql> update `test`.`Add1Demo`
    -> set Value=Value+1
    -> where Id='6';
Query OK, 1 row affected (0.17 sec)
Rows matched: 1 Changed: 1 Warnings: 0

WHERE句内の「'6'」のように、値(文字列)を指定する部分にはシングルクォートを使う点に注目してください。「識別子にはバッククォート、値にはシングルクォート」——この使い分けが非常に重要です。

更新結果の確認

最後に、Idが「6」のレコードを再度取得し、更新が反映されているか確認します。

mysql> select *from Add1Demo where Id='6';

実行結果は以下の通りです。Valueが799から800に更新されていることがわかります。

+------+-------+
| Id   | Value |
+------+-------+
| 6    |   800 |
+------+-------+
1 row in set (0.00 sec)

まとめ

MySQLにおいて、データベース名やテーブル名などの識別子を囲む場合はバッククォート(`)を、文字列などの値を囲む場合はシングルクォート(')を使用します。この違いを理解しておけば、「シングルクォートで囲んだのに動作しない」というトラブルを未然に防げます。特に予約語と同名のカラムやテーブルを扱う際には、バッククォートによるエスケープが有効なので、覚えておきましょう。

  1. MySQLクエリでテーブル名・列名を引用符で囲む必要があるのは?予約語の正しい扱い方

    MySQLでテーブル名や列名に引用符(バッククォート)が必要なケースMySQLのクエリにおいて、テーブル名や列名が予約語(reserved words)に該当する場合は、その名前を引用符で囲む必要があります。MySQLでは、シングルクォートやダブルクォートではなく、バッククォート(`)を使用する点に注意してください。基本の構文は以下のとおりです。SELECT * FROM `table` WHERE `where` = 条件;引用符なしで予約語を使うとエラーになるまず、「table」と「where」という予約語をそのまま使い、引用符なしでテーブルを作成してみましょう。これらはMySQLであらか

  2. phpMyAdminでMySQLデータベースのDECIMAL型に精度(桁数)とスケールを指定する方法

    テーブル作成の準備:データベースを選択するMySQLでテーブルを作成する際には、まず対象となるデータベースを選択する必要があります。ここでは、あらかじめ用意したサンプルデータベースを使用して手順を説明します。テーブル名とカラム数の指定次に、作成するテーブルの名前と、必要なカラム数を入力します。入力が完了したら、「実行(Go)」ボタンをクリックしてください。すると、各カラムの詳細を定義できる画面が表示されます。DECIMAL型の構文についてDECIMAL型には2つのパラメータを指定します。1つ目は全体の桁数(精度)、2つ目は小数点以下の桁数(スケール)です。DECIMAL型の基本構文は以下のとお