2010-02-16 22 views
19

Terminare una query MySQL con \G anziché ; farà sì che MySQL restituisca il set di risultati in formato verticale, che a volte è più facile da leggere se il numero di colonne restituite è elevato.Perché G in SELECT * FROM nome_tabella G?

Esempio:

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) 

La mia domanda ha chiesto per pura curiosità: C'è qualche logica che sta dietro la scelta della combinazione di caratteri \G?

risposta

7

I miei pensieri:

  1. Probabilmente significa "andare".
  2. Postgresql utilizza anche \ g come terminatore di istruzioni. Postgresql è più vecchio di MySQL quindi potrebbe averli influenzati.

Ma, come ho sottolineato nel mio commento al post di Andriyev sopra, in realtà è rendere la maiuscola \ G che fa sì che il display per essere disposti in verticale. La minuscola \ g non ha questo effetto, o se lo fa la documentazione non la menziona. (Non ho un MySQL installare a portata di mano per provarlo.)

+4

"\ g" è equivalente a ";" in MySQL –

0

Esso corrisponde al comando Unix opzioni di formattazione 'ls'

+0

Come corrisponde alle opzioni di formattazione ls? Intendi "ls -G"? – knorv

+0

No, -G jsut nasconde il gruppo. E -g nasconde semplicemente il proprietario. Non sei sicuro di cosa stai pensando, ma -1 lo mostra in 1 colonna. – MJB

17

Risposta breve
L'onnipresente e virgola comando terminatore ; è in realtà una scorciatoia per il comando \g, che è di per sé una scorciatoia per il comando go. Il comando go viene utilizzato storicamente e attualmente in altri tipi di SQL per inviare batch di comandi da compilare e/o interpretare dal server. Il comando \G sembra ereditare è caratteristica lettera da \g, ed è maiuscola per indicare ulteriormente una comportamento modificato, come descritto da ...
mysql> help ... \g go Send command to mysql server. \G ego Send command to mysql server, display result vertically. ...

Longer Risposta (in realtà dovrebbe essere \ E)
Immettendo help al prompt mysql vengono elencati tutti i possibili comandi mysql, tra cui go e ego mostrati sopra. Il comando ego acquisisce una 'e' anteporre indicando che questa forma del comando go adotta anche un comportamento che normalmente imposta invocando mysql con l'interruttore simile mysql -E

Da 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. ...

Quindi perché usare -E come abbreviazione di --vertical? ... Perché sia ​​V, v, sia e erano già stati assegnati come opzioni ad altri comportamenti di invocazione. Il comando ego potrebbe essere facilmente utilizzato \E come scorciatoia, ma ha adottato in modo confuso una versione in maiuscolo del comando \g.

In sintesi ...
--vertical >>-E >>ego >>\ G ... Tada!

+1

Ottima spiegazione del significato di questo simbolo e del ragionamento/convenzione che sta dietro. Questa dovrebbe essere la risposta accettata. – Aaron