Depois de ler algumas respostas e comentários sobre algumas questões de SQL aqui, e também de ouvir que um amigo meu trabalha em um local que possui uma política que os proíbe, estou me perguntando se há algo de errado em usar backticks em torno de nomes de campos no MySQL. .
Isso é:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
count
,type
,table
ou similarescount
,type
, etable
. Esses são termos terrivelmente ambíguos e, em quase todos os casos, esses nomes poderiam ser aprimorados para serem mais específicos. Nomear suas colunas de coisas assim também é perigoso e uma fonte potencial de erros, pois você nunca sabe quando alguém pode esquecer de adicionar os backticks ou não perceber que precisa. Eu acho que é uma prática recomendada evitar o uso de termos reservados como nomes de colunas.Respostas:
O uso de backticks permite que você use caracteres alternativos. Na escrita de consultas, esse não é um problema, mas se alguém assumir que você pode usar backticks, eu assumiria que ele permite que você se safe de coisas ridículas como
O que, é claro, gera tabelas mal nomeadas.
Se você está apenas sendo conciso, não vejo problema com isso, você notará se executar sua consulta como tal
O aviso gerado que voltar terá marcações de retorno e marcas de nomes de tabela totalmente qualificados. Portanto, se você estiver usando recursos de geração de consulta e reescrita automática de consultas, os backticks tornariam menos confuso a análise de seu código.
Eu acho que, no entanto, em vez de determinar se você pode ou não usar backticks, eles devem ter um padrão para nomes. Resolve problemas mais "reais".
fonte
select count from foo
vsselect "count" from foo
vai dar resultados muito diferentes. Mas o postgres difere do mysql de duas maneiras: 1. Os campos são citados por""
. 2. Os campos não citados não diferenciam maiúsculas de minúsculas postgresql.org/docs/current/static/…O único problema com backticks é que eles não são compatíveis com ANSI-SQL, por exemplo, eles não funcionam no SQL Server.
Se houver uma chance de você precisar portar seu SQL para outro banco de dados, use aspas duplas.
fonte
range
ou algo assim. Quando atualizamos para o MySQL 5, ele falhou porque era uma nova palavra reservada!app_key_stores
WHERE ("key" = 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Consulta OK, 0 linhas afetadas (0.00 s) DELETE FROMapp_key_stores
WHERE (key
= 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Consulta OK, 5 linhas afetadas (0,00 s)Para mim, faz muito sentido usá-los o tempo todo ao lidar com nomes de campos.
fonte
Os backticks não fazem parte do SQL ANSI padrão. A partir do manual do mysql :
Portanto, se você usa backticks e decide se afastar do MySQL, você tem um problema (embora provavelmente também tenha problemas muito maiores)
fonte
Não há nada errado se você continuar usando o MYSQL, exceto talvez a imprecisão visual das consultas. Mas eles permitem o uso de palavras-chave reservadas ou espaços incorporados como nomes de tabela e coluna. Isso é um não-não com a maioria dos mecanismos de banco de dados e impedirá qualquer migração posteriormente.
Quanto à leitura fácil, muitas pessoas usam limites para palavras-chave SQL, por exemplo.
fonte
Se você me perguntar, sempre devem ser usados retalhos. Mas existem algumas razões pelas quais uma equipe pode preferir não usá-las.
Vantagens:
Desvantagens:
fonte
É muito mais fácil pesquisar na sua base de códigos por algo nos backticks. Digamos que você tenha uma tabela chamada
event
.grep -r "event" *
pode retornar centenas de resultados.grep -r "\`event\`" *
retornará qualquer coisa que provavelmente faça referência ao seu banco de dados.fonte
Bem, até onde eu sei, todo o objetivo de usar backticks é para que você possa usar nomes que coincidam com palavras-chave reservadas. Portanto, se o nome não estiver colidindo com uma palavra-chave reservada, não vejo motivo para usar backticks. Mas isso também não é motivo para bani-los.
fonte
Coisa simples sobre backtick `` é usada para denotar identificador como database_name, table_name etc e aspas simples '' , aspas duplas "" para literais de string, enquanto "" use para print value como está e '' imprime a variável value hold ou em outro caso, imprima o texto que ele possui.
fonte
se você estiver usando alguns nomes de campos como valores padrão do mysql ou mssql, por exemplo "status", precisará usar backticks ("selecione
status
do nome da tabela" ou "selecione o ID do nome da tabela ondestatus
= 1"). porque o mysql retorna erros ou não funciona na consulta.fonte
O principal uso de backticks (`) no SQL é usá-los em situações em que você os chamará novamente nas próximas cláusulas. Em todos os outros momentos, é recomendável usar aspas duplas ("").
Por exemplo
Na declaração acima, você vê como
Publisher and Location
é usado novamente emGROUP BY
cláusula.Ao invés de usar
Eu apenas usei
Somente quando tais situações surgem, é útil usar backticks. Em todos os outros momentos, é recomendável usar aspas duplas.
fonte