Na edição comunitária do servidor MySQL 8, aqui estão exemplos de uma consulta e comando SQL em :MySQL Shell
SELECT * FROM planet;
DESC planet;
SHOW DATABASES;
SHOW tables;
Como você pode ver, é obrigatório declarar o ;
caractere (ou ambos \g
, \G
conforme o caso) no final da frase.
Mas percebi por engano que é possível executar o use
comando para alterar o banco de dados sem ;
.
Portanto, os dois comandos a seguir funcionam em paz:
use <datababase>
use <datababase>;
Só por curiosidade:
Pergunta
use
Por que o comando não precisa;
ser executado?
Para ser honesto, não tenho certeza se esse é o comando exclusivo dessa situação, mas por que ele é diferente dos outros?
O cliente MySQL,
mysql
, tem vários comandos integrados , comoclear
,help
,pager
,quit
,warnings
, e assim por diante.Os comandos internos são processados pelo cliente e não enviados ao servidor MySQL como instruções SQL. Eles controlam principalmente o comportamento do próprio cliente.
Ao ler uma linha de entrada, o cliente MySQL primeiro realiza uma análise simples da linha para verificar se se trata de um dos comandos internos. Somente se não for um comando interno, o cliente envia a instrução ao servidor.
Devido à análise especial, nenhum dos comandos internos precisa
;
ser encerrado. Eles apenas leem até o final da linha. Você pode adicionar um ,;
mas ele será ignorado.Observe que posso executar este comando sem ponto e vírgula:
Um dos comandos internos é
use
. Por que ele é interno, se você pode executá-loUSE
como uma instrução SQL, e isso afeta o esquema padrão atual no lado do servidor?O comando builtin
use
afeta omysql
cliente, pois este suporta o preenchimento automático com tabulação para nomes de tabelas e colunas. Alterar o esquema padrão comuse
faz com que o cliente leia a lista de tabelas no novo esquema padrão e as adicione ao seu hash de preenchimento automático.O motivo desse comportamento é que o cliente MySQL aceita não apenas instruções SQL que devem ser completadas por ponto e vírgula, mas também seus próprios comandos que não seguem a sintaxe SQL. Você pode executar o comando
?
ouhelp
a partir do cliente MySQL para ver a lista de comandos disponíveis. "Command"USE
é um dos comandos do cliente, portanto, não precisa de ponto e vírgula comoDELIMITER
"Command".No MySQL, o
USE
comando não requer um ponto e vírgula (;
) para ser executado porque é uma instrução única e completa que o cliente MySQL pode interpretar sem precisar depender do ponto e vírgula para indicar o fim do comando.No entanto, usar ponto e vírgula ainda é uma boa prática, especialmente ao executar vários comandos em um script ou lote, pois ajuda a indicar o fim de cada instrução individual.