2010-07-16 17 views
8

En algún código veo que las personas colocan `alrededor de sus columnas. ¿Por qué? ¿Hay alguna diferencia de no usarlos?¿Por qué poner `alrededor de las columnas?

SELECT `players`.`name`, `houses`.`id` FROM `players`, `houses` 
WHERE `houses`.`owner` = `players`.`id` 
+0

Tenga en cuenta que esto no sólo se aplica a las columnas, sino también a las tablas. – BoltClock

+0

A menudo me lo he preguntado yo mismo: la respuesta de KennTM a continuación es correcta, pero ¿con qué frecuencia nos encontramos? Nunca ... pero sigue siendo muy popular usar apoyos. Creo que tal vez a la gente le guste cómo designa visualmente las diferentes partes de la gramática. (Tal vez estoy de acuerdo, especialmente si no capitalizo las palabras clave, lo cual también es bueno, pero estoy desgarrado). –

Respuesta

19

Usando las comillas inversas permite palabras reservadas para ser utilizado como nombres de columna o de mesa por ejemplo,

SELECT `values` FROM `references` WHERE `precision` > 0 

y nombres con nonalphanumerics deben estar encerrados entre el "`" es demasiado, por ejemplo,

SELECT `user name` FROM `registered users` WHERE `total score` > 0 

Ver http://dev.mysql.com/doc/refman/5.1/en/identifiers.html para más información.


Creo que esto se ve a menudo cuando esos nombres se usan dinámicamente, p. (Ejemplo artificial)

mysql_prepare_statement("SELECT `%q` FROM `%q` WHERE `%q` > 0", col, tbl, col_cond); 

en esta forma, cualquier tipo de nombres de columna y de mesa puede ser manejado de forma idéntica, y los intentos de inyección maliciosos como col = "1; DROP TABLE users--" puede ser evitado.

3

Algunos nombres de las columnas podrían ser palabras reservadas en MySQL. En tales casos, puede citarlos con `. En aras de la coherencia y el futuro, algunos desarrolladores citan todos los identificadores.

1

Un término común para acentos abiertos utilizados de esta manera es "comillas identificador". Se utilizan para encerrar los nombres de los objetos de esquema (tablas, columnas, procedimientos, activadores, etc., etc.). Se utilizan porque permiten que los caracteres que de otro modo sean ilegales (espacios, caracteres de puntuación, etc.) y palabras reservadas de SQL aparezcan dentro (o como la totalidad de) el nombre del objeto.

El uso de acentos abiertos para este propósito es específico de MySQL. En el estándar ANSI para SQL, se supone que los identificadores deben estar entre comillas dobles ". MySQL se refiere a " como delimitador de serie por defecto, pero si se establece el modo SQL para incluir ANSI_QUOTES, se considerará como " comillas de identificador alternativo en su lugar (acentos abiertos seguirán funcionando también). Otros RDBMS también tienen caracteres de identificación de propiedad; por ejemplo, SQL Server le permite usar [...], así como "...".

Cuestiones relacionadas