¿Beneficios del uso de backtick (`) en consultas MySQL?

25

En MySQL podemos crear consultas con o sin el `símbolo de backtick ( ). Ejemplo:

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

Ambos funcionan bien en mysql-console.

¿Hay alguna diferencia técnica entre ellos?

¿Hay algún beneficio al usar ( `) sobre consultas simples?

Satish Pandey
fuente

Respuestas:

32

Se llaman identificadores entre comillas y le dicen al analizador que maneje el texto entre ellos como una cadena literal. Son útiles para cuando tiene una columna o tabla que contiene una palabra clave o espacio. Por ejemplo, lo siguiente no funcionaría:

CREATE TABLE my table (id INT);

Pero lo siguiente sería:

CREATE TABLE `my table` (id INT);

Además, lo siguiente obtendría un error, porque COUNTes una palabra clave reservada:

SELECT count FROM some_table

Pero lo siguiente se analizaría correctamente:

SELECT `count` FROM some_table

Espero que esto te ayude.

Mr.Brownstone
fuente
24

Si desea usar algo alrededor de los identificadores de objeto, use al menos las comillas dobles estándar: "

Esto funciona en MySQL, PostgreSQL, SQL Server, Oracle, etc. etc. Para MySQL puede que necesite el modo SQL ansi_quotes , dependiendo de la configuración predeterminada:

SET sql_mode = 'ANSI_QUOTES';

Los Backticks `solo se usan en MySQL, usted aprende un tipo de SQL que no funcionará en ninguna otra marca de DBMS.

Frank Heikens
fuente
6

Significa que puede tener espacios en los nombres de las tablas. No es particularmente atractivo, por supuesto. Lo mismo con SQL Server's [].

Rob Farley
fuente
3

Puede ser útil si tiene una columna con nombre reservado,

Por ejemplo: puede consultar una declaración como esta:

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

Desde mi punto de vista, la respuesta de @ Mr.Brownstone es solo parcialmente correcta.

El backtick `se usa en MySQL para delimitar literales que representan identificadores (no cadenas).

Esto le permite usar caracteres no generalmente aceptados como espacios, palabras reservadas, etc. como identificadores. Por ejemplo:

SELECT * FROM `Strange table name`;

También es importante que también le permita al analizador saber si está haciendo algo mal, como seleccionar una columna que no existe. Por ejemplo:

SELECT notexistingcolumn FROM atable;

Si atableexiste pero la notexistingcolumncolumna no existe, se interpretará como la cadena literal "columna no existente" seleccionándola como un valor (y probablemente emitiendo una advertencia).

En cambio, si usa:

SELECT `notexistingcolumn` FROM `atable`;

Reconocerá que notexistingcolumnes el nombre de una columna que no existe y arrojará un error.

Creo que siempre es preferible rodear los identificadores con backticks, incluido el alias, y tratar de evitar el uso de palabras reservadas y caracteres extraños para los identificadores.

Puede leer más sobre el backtick de MySQL en https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
fuente