为什么SELECT * FROM table_name \ G中的\ G?

时间:2010-02-16 22:52:02

标签: mysql command-line history

使用\G而不是;终止MySQL查询将导致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背后是否​​有任何理由?

4 个答案:

答案 0 :(得分:39)

简答
无处不在的分号命令终结符;实际上是\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. ...继承了它的特征字母,并且大写以进一步表示修改后的行为,如...所述 help

更长的答案(它应该是 \ E
在mysql提示符下输入go会列出所有可能的mysql命令,包括上面显示的egoegogo命令获取前置' e。表明这种形式的mysql -E命令也采用了通常通过使用类似的开关调用mysql强加的行为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作为V的简写?...因为veego都已被指定为其他调用行为的开关。 \E命令可以很容易地使用\g作为它的快捷方式,但是混淆地采用了#define Jfoo_MIN 0 #define Jfoo_MAX 5 void Jfoo(unsigned x) { printf("%u\n", x); } void Jfoo_test(void) { const unsigned u = 5; const unsigned v = 6; struct { unsigned x1 :3; unsigned x2 :3; } foo = { // No warning u + (7 - Jfoo_MAX), // warning: large integer implicitly truncated to unsigned type [-Woverflow] v + (7 - Jfoo_MAX), }; (void) foo; Jfoo(u); Jfoo(v); // warning: expression in static assertion is not an integer constant expression [-Wpedantic] _Static_assert(u <= Jfoo_MAX, "Too hot u"); // warning: expression in static assertion is not an integer constant expression [-Wpedantic] // error: static assertion failed: "Too hot v" _Static_assert(v <= Jfoo_MAX, "Too hot v"); } 命令的大写版本。

总结......
- 垂直&gt;&gt; -E &gt;&gt; ego &gt;&gt; \ G ... Tada!

答案 1 :(得分:7)

我的想法:

  1. 这可能意味着“去”。
  2. Postgresql也使用\ g作为语句终止符。 Postgresql比MySQL早,所以它可能会影响它们。
  3. 但正如我在上面对Andriyev的帖子所做的评论中所指出的那样,它实际上是使得G大写,导致显示垂直排列。小写\ g没有这种效果,或者如果它有,那么文档没有提到它。 (我没有方便的MySQL安装试用。)

答案 2 :(得分:1)

自动垂直输出

除了 Gavin Jackson 很棒的答案之外,我还发现了这个小宝石:

$ mysql --auto-vertical-output

如果输出比终端宽,结果会自动以垂直格式显示。

添加别名
$ alias mysql='mysql --auto-vertical-output'

使别名永久化
$ echo "alias mysql='mysql --auto-vertical-output'" | tee -a ~/.bashrc

答案 3 :(得分:-2)

它匹配Unix命令'ls'格式化选项