No MySQL podemos criar consultas com ou sem o `
símbolo de acento grave ( ). Exemplo:
SELECT * FROM TEST;
SELECT * FROM `TEST`;
Ambos funcionam bem no mysql-console.
Existe alguma diferença técnica entre eles?
Existe algum benefício usando ( `
) sobre consultas simples?
Eles são chamados de identificadores entre aspas e dizem ao analisador para tratar o texto entre eles como uma string literal. Eles são úteis para quando você tem uma coluna ou tabela que contém uma palavra-chave ou espaço. Por exemplo, o seguinte não funcionaria:
Mas seria o seguinte:
Além disso, o seguinte receberia um erro, porque
COUNT
é uma palavra-chave reservada:Mas o seguinte seria analisado corretamente:
Espero que isso ajude você.
Se você quiser usar algo em torno de identificadores de objeto, use pelo menos as aspas duplas padrão: "
Isso funciona em MySQL, PostgreSQL, SQL Server, Oracle, etc. etc. Para MySQL você pode precisar do modo SQL ansi_quotes , dependendo da configuração padrão:
Backticks ` são usados apenas no MySQL, você aprende um tipo de SQL que não funcionará em nenhuma outra marca de SGBD.
Isso significa que você pode ter espaços nos nomes das tabelas. Não particularmente atraente, é claro. O mesmo com o SQL Server [].
Pode ser útil se você tiver uma coluna com nome reservado,
por exemplo: Você pode consultar uma declaração como esta:
Do meu ponto de vista, a resposta do @Mr.Brownstone está apenas parcialmente correta.
O backtick
`
é usado no MySQL para delimitar literais que representam identificadores (não strings).Isso permite que você use caracteres normalmente não aceitos como espaços, palavras reservadas, etc. como identificadores. Por exemplo:
Também importante é que ele também permite que o analisador saiba se você está fazendo algo errado, como selecionar uma coluna que não existe. Por exemplo:
Se
atable
existir, masnotexistingcolumn
a coluna não existir, ela será interpretada como a string literal "notexistingcolumn" selecionando-a como um valor (e provavelmente emitindo um aviso).Em vez disso, se você usar:
Ele reconhecerá que
notexistingcolumn
é o nome de uma coluna que não existe e lançará um erro.Eu acho que é sempre preferível cercar os identificadores com acentos graves, incluindo o alias, e tentar evitar o uso de palavras reservadas e caracteres estranhos para identificadores.
Você pode ler mais sobre o backtick do MySQL .