2011/11/19

MySQL「ERROR: No query specified」の意味と解決策を徹底解説!

MySQL 


MySQLにメタコマンド『\G』というものがあります。

出力結果を縦に表示してくれる優れものなのですが、うっかりエラーを出してしまうときがありますよね。

このエラーはなぜ出てしまうのか、わかりにくいので私なりにまとめてみました。


これです。

ERROR:
  No query specified


「No query specified」の意味

エラーの意味

クエリーがありませんよ」と言っています。


例えばそのエラーを簡単に出すなら; セミコロンだけ入力して実行してみましょう。

mysql> ;
ERROR: No query specified

出ました。


なぜエラーが出るの?

恐らくこの記事にたどり着いた人は、「クエリーを書いているのに、なぜエラーが出るのだろう?」と疑問になった人が見ているのだと思います。

その答えはずばり「\Gは; セミコロンを含むから」です。


よくそのエラーが発生してしまう再現手順は次の通りです。



よくあるエラーの発生手順

1. まずセレクトする。

特に普通の操作です。

とあるテーブルをセレクトしたとします

mysql> select * from test_table;
+----+------+
| id | name |
+----+------+
|  1 | 壱   |
|  2 | 弐   |
|  3 | 参   |
+----+------+
3 rows in set (0.00 sec)

2. 縦に表示したいなぁと思って\Gをつける。

そのあと、縦に表示したいなぁ、と思ってさっきのクエリーの後ろに『\G』をつけてみます。


mysql> select * from test_table \G;
*************************** 1. row ***************************
  id: 1
name: 壱
*************************** 2. row ***************************
  id: 2
name: 弐
*************************** 3. row ***************************
  id: 3
name: 参
3 rows in set (0.00 sec)

ERROR:
No query specified

結果、エラーメッセージが表示されてしまいます。


なぜそのようなことが起こるのか

私は理由はたったひとつだと思います。


クエリーの最後には; セミコロンが必要だと思い込んでいるから、

『\G』の後ろに; セミコロンをつけて実行してしまうのです。


まとめ

SQLは、セパレーターとなる; セミコロンで終わるのがルールです。

なので、思い込みや日頃の癖で、クエリーの最後にセミコロンをつけてしまうのだと思います。


『\G』は; セミコロンを含んでいるので不要なのです。


最後は『\G』で閉めましょうね。


mysql> select * from test_table \G
*************************** 1. row ***************************
  id: 1
name: 壱
*************************** 2. row ***************************
  id: 2
name: 弐
*************************** 3. row ***************************
  id: 3
name: 参
3 rows in set (0.00 sec)


このエントリーをはてなブックマークに追加