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: 0WHERE句内の「'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において、データベース名やテーブル名などの識別子を囲む場合はバッククォート(`)を、文字列などの値を囲む場合はシングルクォート(')を使用します。この違いを理解しておけば、「シングルクォートで囲んだのに動作しない」というトラブルを未然に防げます。特に予約語と同名のカラムやテーブルを扱う際には、バッククォートによるエスケープが有効なので、覚えておきましょう。
-
MySQLクエリでテーブル名・列名を引用符で囲む必要があるのは?予約語の正しい扱い方
MySQLでテーブル名や列名に引用符(バッククォート)が必要なケースMySQLのクエリにおいて、テーブル名や列名が予約語(reserved words)に該当する場合は、その名前を引用符で囲む必要があります。MySQLでは、シングルクォートやダブルクォートではなく、バッククォート(`)を使用する点に注意してください。基本の構文は以下のとおりです。SELECT * FROM `table` WHERE `where` = 条件;引用符なしで予約語を使うとエラーになるまず、「table」と「where」という予約語をそのまま使い、引用符なしでテーブルを作成してみましょう。これらはMySQLであらか
-
phpMyAdminでMySQLデータベースのDECIMAL型に精度(桁数)とスケールを指定する方法
テーブル作成の準備:データベースを選択するMySQLでテーブルを作成する際には、まず対象となるデータベースを選択する必要があります。ここでは、あらかじめ用意したサンプルデータベースを使用して手順を説明します。テーブル名とカラム数の指定次に、作成するテーブルの名前と、必要なカラム数を入力します。入力が完了したら、「実行(Go)」ボタンをクリックしてください。すると、各カラムの詳細を定義できる画面が表示されます。DECIMAL型の構文についてDECIMAL型には2つのパラメータを指定します。1つ目は全体の桁数(精度)、2つ目は小数点以下の桁数(スケール)です。DECIMAL型の基本構文は以下のとお