Benefícios de usar backtick (`) em consultas MySQL?

25

No MySQL, podemos criar consultas com ou sem o `símbolo backtick ( ). Exemplo:

  1. SELECT * FROM TEST;
  2. SELECT * FROM `TEST`;

Ambos funcionam bem no mysql-console.

Existe alguma diferença técnica entre eles?

Existe algum benefício em usar ( `) sobre consultas simples?

Satish Pandey
fonte

Respostas:

32

Eles são chamados de identificadores entre aspas e informam ao analisador para manipular 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:

CREATE TABLE my table (id INT);

Mas o seguinte seria:

CREATE TABLE `my table` (id INT);

Além disso, o seguinte receberia um erro, porque COUNTé uma palavra-chave reservada:

SELECT count FROM some_table

Mas o seguinte seria analisado corretamente:

SELECT `count` FROM some_table

Espero que isso ajude você.

Mr.Brownstone
fonte
24

Se você deseja usar algo em torno dos identificadores de objeto, use pelo menos as aspas duplas padrão: "

Isso funciona no MySQL, PostgreSQL, SQL Server, Oracle etc. etc. No MySQL, você pode precisar do modo SQL ansi_quotes , dependendo da configuração padrão:

SET sql_mode = 'ANSI_QUOTES';

Backticks `são usados ​​apenas no MySQL, você aprende um tipo de SQL que não funcionará em nenhuma outra marca de DBMS.

Frank Heikens
fonte
6

Isso significa que você pode ter espaços nos nomes das tabelas. Não é particularmente atraente, é claro. O mesmo com o [] do SQL Server.

Rob Farley
fonte
3

Pode ser útil se você tiver uma coluna com nome reservado,

por exemplo: você pode consultar uma declaração como esta:

select * from tablename group by `group`;
HVNSweeting
fonte
1

Do meu ponto de vista, a resposta do Sr. Brown é apenas parcialmente correta.

O backtick `é usado no MySQL para delimitar literais que representam identificadores (não strings).

Isso permite que você use caracteres não aceitos como espaços, palavras reservadas etc. como identificadores. Por exemplo:

SELECT * FROM `Strange table name`;

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:

SELECT notexistingcolumn FROM atable;

Se atableexistir, mas a notexistingcolumncoluna 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:

SELECT `notexistingcolumn` FROM `atable`;

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 identificadores com backticks, 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 em https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
fonte