Pregunta

Después de leer un par de respuestas y comentarios sobre algunas preguntas de SQL aquí, y también de escuchar que un amigo mío trabaja en un lugar que tiene una política que los prohíbe, me pregunto si hay algo de malo en usar backticks en el campo nombres en MySQL.

Eso es:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
¿Fue útil?

Solución

El uso de backticks le permite usar caracteres alternativos. En la redacción de consultas no es un problema, pero si se supone que puede usar backticks, supongo que le permite salirse con la suya con cosas ridículas como

SELECT `id`, `my name`, `another field` , `field,with,comma` 

Que, por supuesto, genera tablas mal nombradas.

Si solo estás siendo conciso, no veo ningún problema con eso, notará si ejecuta su consulta como tal

EXPLAIN EXTENDED Select foo,bar,baz 

La advertencia generada que vuelve tendrá marcas de retroceso y nombres de tabla totalmente calificados. Entonces, si está utilizando funciones de generación de consultas y una reescritura automática de consultas, los backticks harían que cualquier análisis de su código sea menos confuso.

Sin embargo, creo que, en lugar de exigir si puedes usar backticks o no, deberían tener un estándar para los nombres. Soluciona más problemas 'reales'.

Otros consejos

El único problema con los backticks es que no son compatibles con ANSI-SQL, p. no funcionan en SQL Server.

Si existe la posibilidad de que tenga que portar su SQL a otra base de datos, utilice comillas dobles.

Para mí tiene mucho sentido usarlos en todo momento cuando se trata de nombres de campo.

  • En primer lugar, una vez que adquieras el hábito, no está de más presionar la tecla de retroceso.
  • En segundo lugar, para mí, es más fácil ver cuáles son exactamente los campos en su consulta y cuáles son las palabras clave o los métodos.
  • Por último, le permite usar cualquier nombre de campo que desee al diseñar su tabla. A veces tiene mucho sentido nombrar un campo '' clave '', '' orden '', o '' valores '' ... todo lo cual requiere retroceder cuando se hace referencia a ellos.

Los backticks no son parte del ANSI SQL estándar. De el manual de mysql :

  

Si el modo SQL ANSI_QUOTES es   habilitado, también está permitido cotizar   identificadores entre comillas dobles

Entonces, si usa backticks y luego decide alejarse de MySQL, tiene un problema (aunque probablemente también tenga problemas mucho más grandes)

No hay nada de malo si sigues usando MYSQL, excepto tal vez la confusión visual de las consultas. Pero sí permiten el uso de palabras clave reservadas o espacios incrustados como nombres de tabla y columna. Esto es un no-no con la mayoría de los motores de bases de datos y evitará cualquier migración en un momento posterior.

En cuanto a la lectura fácil, muchas personas usan mayúsculas para las palabras clave SQL, por ejemplo.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

Si me preguntas, siempre deberías usar backticks. Pero hay algunas razones por las que un equipo puede preferir no usarlas.

Ventajas:

  • Utilizándolos, no hay palabras reservadas ni caracteres prohibidos.
  • En algunos casos, obtienes mensajes de error más descriptivos.
  • Si evita las malas prácticas no le importa, pero ... en palabras reales, a veces son una forma decente de evitar las inyecciones de SQL.

Desventajas:

  • No son estándar y generalmente no son portátiles. Sin embargo, siempre y cuando no use una marca de retroceso como parte de un identificador (que es la peor práctica que puedo imaginar), puede transferir su consulta eliminando automáticamente las marcas de retroceso.
  • Si parte de su consulta proviene de Access, pueden citar los nombres de las tablas con " (y tal vez no pueda eliminar todo " a ciegas). Sin embargo, se permiten mezclas de backticks y comillas dobles.
  • Algún estúpido software o función filtra sus consultas y tiene problemas con los backticks. Sin embargo, son parte de ASCII, por lo que esto significa que su software / función es muy mala.

Bueno, hasta donde yo sé, el propósito de usar backticks es para que puedas usar nombres que coincidan con palabras clave reservadas. Entonces, si el nombre no está colisionando con una palabra clave reservada, no veo ninguna razón para usar backticks. Pero tampoco es motivo para prohibirlos.

Es mucho más fácil buscar en su base de código algo en backticks. Supongamos que tiene una tabla llamada event . grep -r " event " * podría devolver cientos de resultados. grep -r " \ `event \` " * devolverá cualquier cosa que probablemente haga referencia a su base de datos.

Cosa simple sobre la tecla de retroceso `` se usa para denotar identificadores como nombre_de_base_datos, nombre_tabla, etc., y comillas simples '' , comillas dobles " " para literales de cadena, mientras que " " use para imprimir el valor tal como está e '' imprima la retención de la variable de valor o, en otro caso, imprima el texto que tiene.

i.e 1.-> use `model`;   
    here `model` is database name not conflict with reserve keyword 'model'
2- $age = 27;
insert into `tbl_people`(`name`,`age`,`address`) values ('Ashoka','$age',"Delhi");

here i used both quote for all type of requirement. If anything not clear let me know..

si está utilizando algunos nombres de campo como valores predeterminados de mysql o mssql, por ejemplo " status " ;, tiene que usar comillas inversas (" seleccione status de table_name " o " seleccione id de table_name donde status = 1 "). porque mysql devuelve errores o no funciona la consulta.

El uso principal de los backticks (`) en SQL es usarlos en situaciones en las que los volverá a llamar en próximas cláusulas. En cualquier otro momento, se recomienda utilizar comillas dobles (" ").

Por ejemplo

SELECT CONCAT(Name, ' in ', city, ', ', statecode) AS `Publisher and Location`,
    COUNT(ISBN) AS "# Books",
    MAX(LENGTH(title)) AS "Longest Title",
    MIN(LENGTH(title)) AS "Shortest Title"
FROM Publisher JOIN Book
ON Publisher.PublisherID = Book.PublisherID WHERE INSTR(name, 'read')>0
GROUP BY `Publisher and Location`
HAVING COUNT(ISBN) > 1;

En la declaración anterior, ¿ve cómo se utiliza Publisher and Location nuevamente en la cláusula GROUP BY .

En lugar de usar

  

GROUP BY Nombre, ciudad, código de estado

Acabo de usar

  

GROUP BY Editor y ubicación

Solo cuando surgen tales situaciones, es útil usar backticks. En todos los demás tiempos se recomienda el uso de comillas dobles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top