web-dev-qa-db-ja.com

SELECT * FROM table_name \ Gの\ Gはなぜですか?

MySQLクエリを\Gの代わりに;で終了すると、MySQLは結果セットを垂直形式で返します。これは、返される列の数が多い場合に読みやすい場合があります。

例:

mysql> SELECT * FROM help_keyword LIMIT 3\G
*************************** 1. row ***************************
help_keyword_id: 0
           name: JOIN
*************************** 2. row ***************************
help_keyword_id: 1
           name: REPEAT
*************************** 3. row ***************************
help_keyword_id: 2
           name: SERIALIZABLE
3 rows in set (0.00 sec)

純粋な好奇心から質問された質問:キャラクターの組み合わせ\Gを選択する理由はありますか?

29
knorv

私の考え:

  1. それはおそらく「行く」を意味します。
  2. Postgresqlはまた、\ gをステートメント終了文字として使用します。 PostgresqlはMySQLよりも古いため、影響を受けている可能性があります。

しかし、上記のAndriyevの投稿へのコメントで指摘したように、ディスプレイが垂直にレイアウトされるのは、実際には\ Gが大文字になっているためです。小文字の\ gはその効果がありません。または、効果がある場合、ドキュメントでは言及されていません。 (私はそれを試すのに便利なMySQLインストールを持っていません。)

7
Nate C-K

短い回答
ユビキタスセミコロンコマンドターミネータ_;_は、実際には_\g_コマンドの省略形であり、それ自体がgoコマンドの省略形です。 goコマンドは、歴史的にも現在もSQLの他の種類で使用されており、サーバーでコンパイルまたは解釈されるコマンドのバッチを送信します。 _\G_コマンドは、その特徴的な文字を_\g_から継承しているようで、大文字で大文字に変更された動作を示しています。
_mysql> help ... \g go Send command to mysql server. \G ego Send command to mysql server, display result vertically. ..._

長い回答(実際には\ Eである必要があります)
mysqlプロンプトでhelpと入力すると、上記のgoおよびegoを含む、考えられるすべてのmysqlコマンドがリストされます。 egoコマンドは、この形式のgoコマンドも、同様のスイッチ_mysql -E_を使用してmysqlを呼び出すことにより通常課される動作を採用することを示す、先頭に「e」を付けて取得します

man mysql... ... --vertical, -E Print query output rows vertically (one line per column value). Without this option, you can specify vertical output for individual statements by terminating them with \G. ...から

では、なぜ_-E_を_--vertical_の省略形として使用するのですか?... Vv、およびeの両方がすでに他の呼び出し動作へのスイッチとして割り当てられています。 egoコマンドは、_\E_をショートカットとして簡単に使用できたかもしれませんが、_\g_コマンドの大文字バージョンを混乱させて採用しました。

要約すれば...
-vertical >> -E >> ego >> \ G ...多田!

43
Gavin Jackson