O mysql
é uma shell SQL simples (com
capacidades GNU readline
). Ele suporta usos
interativos e não interativos. Quando usado interativamente, os
resultados das consultas são apresentadas no formato de tabela
ASCII. Quando não usado interativamente (como um filtro por
exemplo), o resultado é apresentado em um formato separado por
tabulações. (O formato de saída pode ser alterado utilizando
opções da linha de comando.) Você pode executar scripts desta
forma:
shell> mysql database < script.sql > saida.tab
Se você tiver problemas devido a memória insuficiente no
cliente, utilize a opção --quick
! Isto força
o mysql
a utilizar
mysql_use_result()
no lugar de
mysql_store_result()
para recuperar o
conjunto de resultados.
Utilizar o mysql
é muito fáci. Inicie-o
como mostrado a seguir: mysql banco_de_dados
ou mysql --user=nome_usuário --password=sua_senha
banco_de_dados
. Digite uma instrução SQL, termine-a
com ‘;
’, '\g
',
ou '\G
' e pressione RETURN/ENTER.
O mysql
Suporta as seguintes opções:
-?, --help
Exibe esta ajuda e sai.
-A, --no-auto-rehash
Sem reprocessamento automático. O 'rehash' deve ser usado
se o usuário desejar que o cliente mysql
complete as tabelas e campos. Esta opção é usada para
acelerar a inicialização do cliente.
--prompt=...
Configura o prompt do mysql com o formato especificado.
-b, --no-beep
Deliga o beep nos erros.
-B, --batch
Exibe resultados com o caractere de tabulação como o separador, cada registro em uma nova linha. Não utiliza o arquivo de histórico.
--character-sets-dir=...
Diretório onde os conjuntos de caracteres estão localizados.
-C, --compress
Utiliza compactação no protocolo cliente/servidor.
-#, --debug[=...]
Log de Depuração. O padrão é 'd:t:o,/tmp/mysql.trace'.
-D, --database=...
Qual banco de dados usar. Isto geralmente é util em um
arquivo my.cnf
.
--default-character-set=...
Configura o conjunto de caracters padrão.
-e, --execute=...
Executa o comando e sai. (Saída parecida com --batch)
-E, --vertical
Exibe a saída de uma consulta (linhas) verticalmente. Sem
esta opção você também pode forçar esta saída
terminando suas instruções com \G
.
-f, --force
Continue mesmo se for obtido um erro SQL.
-g, --no-named-commands
Comandos nomeados serão desabilitados. Utilize somente a forma \*, ou use comandos nomeados apenas no começo da linha terminada com um ponto-e-vírgula (;). Desde a versão 10.9, o cliente agora inicia com esta opção habilitada por padrão! Com a opção -g, entretando, comandos de formato longo continuarão funcionando na primeira linha.
-G, --enable-named-commands
Comandos nomeados são habilitados. Comandos de formato longo são aceitos assim como os comandos reduzidos \*.
-i, --ignore-space
Ignore caractere de espaço depois de nomes de funções.
-h, --host=...
Conectar à máquina especificada.
-H, --html
Produz saída HTML.
-X, --xml
Produz saída XML.
-L, --skip-line-numbers
Não escreve o número da linha para os erros. Útil quando se deseja comparar arquivos com resultados que incluem mensagens de erro.
--no-pager
Desabilita paginação e impressão na saída padrão. Veja também a ajuda interativa (\h).
--no-tee
Desabilita arquivo de saída. Veja também a ajuda interativa (\h).
-n, --unbuffered
Descarrega e atualiza o buffer depois de cada pesquisa.
-N, --skip-column-names
Não escrever nomes de colunas nos resultados.
-O, --set-variable nome=opção
Fornece um valor a uma variável. --help
lista as variáveis. Por favor, note que as sintaxes
--set-variable=name=value
e -O
name=value
estão obsoletas desde o MySQL 4.0, use
--nome=valor
.
-o, --one-database
Atualiza somente o banco de dados padrão. Isto é útil para evitar atualização em outros bancos de dados no log de atualizações.
--pager[=...]
Tipo de saída. O padrão é sua variável de ambiente
PAGER
. Paginadores válidos são: less,
more, cat [>nome_arquivo], etc. Veja também a ajuda
interativa (\h). Esta opção não funciona no modo batch. A
opção pager funciona somente no UNIX.
-p[password], --password[=...]
Senha a ser usada ao conectar ao servidor. Se uma senha não
é fornecida na linha de comando, lhe será solicitado uma.
Perceba que se você utilizar o formato curto
-p
você não pode ter um espaço entre a
opção e a senha.
-P --port=...
Número da porta TCP/IP para usar na conexão.
--protocol=(TCP | SOCKET | PIPE | MEMORY)
Especifica o protocolo de conexão usado. Novo no MySQL 4.1.
-q, --quick
Não faz cache do resultado, imprime linha a linha. Isto pode deixar o servidor mais lento se a saída for suspendida. Não usa arquivo de histórico.
-r, --raw
Exibe valores de colunas sem conversão de escapes.
Utilizado com --batch
--reconnect
Se a conexão é perdida, tentar reconectar ao servidor automaticamente (mas apenas uma vez).
-s, --silent
Opção para ser mais silencioso.
-S --socket=...
Arquivo socket para ser utilizado na conexão.
-t --table
Saída no formato de tabela. Isto é padrão no modo não-batch.
-T, --debug-info
Exibe alguma informação de depuração na saída.
--tee=...
Anexa tudo no arquivo de saída. Veja também a ajuda interativa (\h). Não funciona no modo batch.
-u, --user=#
Usuário para login diferente do usuário atual do sistema.
-U, --safe-updates[=#],
--i-am-a-dummy[=#]
Permite somente que UPDATE
e
DELETE
utilizem chaves. Veja abaixo para
maiores informações sobre esta opção. Você pode zerar
esta opção se possui-la no arquivo
my.cnf
utilizando
--safe-updates=0
.
-v, --verbose
Modo verbose (-v -v -v fornece o formato de saída da tabela).
-V, --version
Gera saída com informação de versão e sai.
-w, --wait
Espera e repete em vez de sair se a conexão estiver inacessível.
Você também pode configurar as seguntes variáveis com
-O
ou --set-variable
. Por
favor, note que as sintaxes
--set-variable=nome=valor
e -O
name=value
estão obsoletas desde o MySQL 4.0, use
--var=option
:
Nome Variável | Padrão | Descrição |
connect_timeout | 0 | Número de seguntos antes de esgotar o tempo da conexão |
local-infile | 0 | Disabilita (0) ou habilita (1) capacidade LOCAL para
LOAD DATA INFILE
|
max_allowed_packet | 16777216 | Tamanho máximo do pacote para enviar/receber do servidor |
net_buffer_length | 16384 | Tamanho do buffer para comunicação TCP/IP e socket |
select_limit | 1000 | Limite automático para SELECT quando utilizar
--safe-updtaes
|
max_join_size | 1000000 | Limite automático para registros em uma join quando utilizar
--safe-updtaes . |
Se o cliente mysql
perder a conexào com o
servidor enquanto envia uma consulta, ele tentará se reconectar
imediatamente e automaticamente uma vez e enviar a consulta
novamente. Note que mesmo se ele obter sucesso na reconexão,
como sua primeira conexão foi finalizada, todas seus objetos da
sessão anteriores foram perdidos: tabelas temporárias, e
variáveis de sessão e de usuário. Desta forma, o
comportamento acima pode ser perigoso para você, como neste
exemplo onde o servidor foi desligado e reiniciado sem você
saber:
mysql>set @a=1;
Query OK, 0 rows affected (0.05 sec) mysql>insert into t values(@a);
ERROR 2006: MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test Query OK, 1 row affected (1.30 sec) mysql>select * from t;
+------+ | a | +------+ | NULL | +------+ 1 row in set (0.05 sec)
A variável de usuário @a
foi perdida com a
conexão e depois da reconexão ela é indefinida. Para se
proteger deste risco, você pode iniciar o cliente
mysql
com a opção
--disable-reconnect
.
Se você digitar 'help' na linha de comando,
mysql
irá exibir os comandos que ele
suporta:
mysql> help
MySQL commands:
help (\h) Display this text.
? (\h) Synonym for `help'.
clear (\c) Clear command.
connect (\r) Reconnect to the server.
Optional arguments are db and host.
delimiter (\d) Set query delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server,
display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager].
Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file.
Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile].
Append everything into given outfile.
use (\u) Use another database.
Takes database name as argument.
Os comandos edit
, nopager
,
pager
, e system
funcionam
apenas no Unix.
O comando status
lhe fornece algumas
informações sobre a conexão e o servidor que está
utilizando. Se você estiver executando no modo
--safe-updates
, status
irá
também imprimir os valores para as variáveis
mysql
que afetam suas consultas.
Uma opção útil para iniciantes (introduzido no MySQL versão
3.23.11) é o --safe-updates
(ou
--i-am-a-dummy
para usuários que uma vez
possam ter feito um DELETE FROM nome_tabela
mas esqueceram da cláusula WHERE
). Quando
utilizar esta opção, o mysql
envia o
seguinte comando ao servidor MySQL quando abrir a conexão.
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#, SQL_MAX_JOIN_SIZE=#max_join_size#"
onde #select_limit#
e #max_join
size#
são variáveis que podem ser configuradas da
linha de comando mysql
. See
Secção 5.5.6, “Sintaxe de SET
”.
O efeito da opção acima é:
Você não tem permissão de utilizar uma instrução
UPDATE
ou DELETE
se
você não possuir uma chave na parte
WHERE
. Pode-se, entretanto, forçar um
UPDATE/DELETE
utilizando
LIMIT
:
UPDATE nome_tabela SET campo_nao_chave=# WHERE campo_nao_chave=# LIMIT 1;
Todos resultados maiores são limitados automaticamente a
#select_limit#
linhas.
SELECT
's que provavelmente precisarão
examinar mais que #max_join_size
combinaçoes de linhas serão abortadas.
Algumas dicas úteis sobre o cliente mysql
:
Alguns dados são muito mais legíveis quando exibido verticalmente, em vez da saída do tipo caixa horizontal comum. Por exemplo: Textos longos, que incluem várias linhas, são muito mais fáceis de serem lidos com saída vertical.
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 lIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
mail_to: "Thimble Smith" <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar with UTF-8
Thimble> or Unicode? Otherwise, I'll put this on my TODO list and see what
Thimble> happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
Para o log, você pode utilizar a opção
tee
. O tee
pode ser
iniciado com a opção --tee=...
, ou pela linha
de comando de maneira interativa com o comando
tee
. Todos os dados exibidos na tela serão
anexados no arquivo fornecido. Isto também pode ser muito útil
para propósitos de depuração. O tee
pode
ser desabilitado da linha de comando com o comando
notee
. Executando tee
novamente o log é reiniciado. Sem um parâmetro o arquivo
anterior será usado. Perceba que tee
irá
atualizar os resultados dentro do arquivo depois de cada
comando, pouco antes da linha de comando reaparecer esperando
pelo próximo comando.
Navegar ou pesquisar os resultados no modo interativo em algum
programa do UNIX como o less, more ou outro similar, é agora
possível com a opção --pager[=...]
. Sem
argumento, o cliente mysql
irá procurar pela
variável de ambiente PAGER
e configurar
pager
para este valor.
pager
pode ser iniciado a partir da linha de
comando interativa com o comando pager
e
desabilitado com o comando nopager
. O comando
recebe um argumento opcional e e o pager
será configurado com ele. O comando pager
pode ser chamado com um argumento, mas isto requer que a opção
--pager
seja usada, ou o
pager
será usado com a saída padrão.
pager
funciona somente no UNIX, uma vez que
é utilizado a função popen()
, que não
existe no Windows. No Windows a opção tee
pode ser utilizada, entretanto ela pode não ser cômoda como
pager
pode ser em algumas situações.
Algumas dicas sobre pager
:
Você pode usá-lo para gravar em um arquivo:
mysql> pager cat > /tmp/log.txt
e os resultados irão somente para um arquivo. Você também
pode passar qualquer opções para os programas que você
deseja utilizar com pager
:
mysql> pager less -n -i -S
Note a opção -S
exibida acima. Você
pode achá-la muito útil quando navegar pelos resultados;
experimente com a opção com saída a horizontal (finalize
os comandos com \g
, ou
;
) e com saída vertical (final dos
comandos com \G
). Algumas vezes um
resultado com um conjunto muito largo é difícil ser lido
na tela, com a opção -S
para
less
, você pode navegar nos resultados
com o less
interativo da esquerda para a
direita, evitando que linhas maiores que sua tela continuem
na próxima linha. Isto pode tornar o conjunto do resultado
muito mais legível. você pode alterar o modo entre ligado
e desligado com o less
interativo com
-S
. Veja o 'h'(help) para mais ajuda
sobre o less
.
Você pode combinar maneiras muito complexas para lidar com os resultados, por exemplo, o seguinte enviaria os resultados para dois arquivos em dois diferentes diretórios, em dois discos diferentes montados em /dr1 e /dr2, e ainda exibe o resultado na tela via less:
mysql>pager cat | tee /dr1/tmp/res.txt | \
tee /dr2/tmp/res2.txt | less -n -i -S
Você também pode combinar as duas funções acima; tenha o
tee
habilitado, o pager
configurado para 'less' e você estará apto a navegar nos
resultados no less do Unix e ainda ter tudo anexado em um
arquivo ao mesmo tempo. A diferença entre UNIX
tee
usado com o pager
e o
tee
embutido no cliente
mysql
é que o tee
embutido funciona mesmo se você não tiver o comando
UNIX tee
disponível. O
tee
embutido também loga tudo que é exibido
na tela, e o UNIX tee
usado com
pager
não loga completamente. Por último o
tee
interativo é mais cômodo para trocar
entre os modos on e off, quando você desejar logar alguma coisa
em um arquivo, mas deseja estar apto para desligar o recurso
quando necessário.
A partir da versão 4.0.2 é possível alterar o prompt no
cliente de linha de comando mysql
.
Você pode usar as seguintes opções do prompt:
Opção | Descrição |
\v | versão mysqld |
\d | banco de dados em uso |
\h | máquina na qual está conectado |
\p | porta na qual está conectado |
\u | nome do usuário |
\U | nome_usuário@maquina |
\\ | ‘\ ’ |
\n | nova quebra de linha |
\t | tab |
\ | espaço |
\_ | espaço |
\R | hora no formato 24h (0-23) |
\r | hora no formato 12h (1-12) |
\m | minutos |
\y | ano com dois digitos |
\Y | ano com quatro digitos |
\D | formato completo da data |
\s | segundos |
\w | dia da semana no formato com 3 letras (Mon, Tue, ...) |
\P | am/pm |
\o | mês no formato de número |
\O | mês no formato com 3 letras (Jan, Feb, ...) |
\c | contador que cresce a cada comando |
‘\
’ seguido por qualquer outra
letra apenas retorna aquela letra.
Você pode definir o prompt nos seguintes lugares:
Variável de Ambiente
Você pode configurar o prompt
em
qualquer arquivo de configuração do MySQL, no grupo
mysql
. Por exemplo:
[mysql] prompt=(\u@\h) [\d]>\_
Linha de Comando
Você pode definir a opção --prompt
na
linha de comando para mysql
. Por exemplo:
shell> mysql --prompt="(\u@\h) [\d]> "
(usuário@maquina) [banco de dados]>
Interativamente
Você também pode usar o comando prompt
(ou \R
) para alterar o seu prompt
interativamente. Por exemplo:
mysql>prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_' (usuario@maquina) [banco de dados]> (usuario@maquina) [banco de dados]> prompt Returning to default PROMPT of mysql> mysql>
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.