web-dev-qa-db-fra.com

Utiliser des backticks autour des noms de champs

Après avoir lu quelques réponses et des commentaires sur certaines questions SQL ici, et également appris qu'un de mes amis travaille dans un endroit qui a une politique qui les interdit, je me demande s'il n'y a rien de mal à utiliser des backticks autour des noms de champs dans MySQL .

C'est:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
164
nickf

Utiliser des backticks vous permet d'utiliser des caractères alternatifs. En écriture de requête, ce n’est pas un problème, mais si l’on suppose que vous pouvez simplement utiliser des backticks, je suppose que cela vous permet de vous en sortir avec des choses ridicules comme

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

Ce qui bien sûr génère des tables mal nommées. 

Si vous êtes juste concis, je ne vois pas de problème avec cela, vous remarquerez que si vous exécutez votre requête en tant que telle

EXPLAIN EXTENDED Select foo,bar,baz 

Les avertissements générés qui reviendront auront des noms de table qualifiés complets et . Par conséquent, si vous utilisez des fonctionnalités de génération de requête et une réécriture automatique des requêtes, les backticks rendraient tout ce qui serait plus difficile à analyser votre code. 

Je pense cependant que, au lieu d’indiquer si vous pouvez ou non utiliser des backticks, ils devraient avoir une norme pour les noms. Cela résout plus de «vrais» problèmes. 

148
Kent Fredric

Le seul problème des backticks est qu’ils ne sont pas compatibles ANSI-SQL, par exemple. ils ne fonctionnent pas dans SQL Server.

S'il y a une chance que vous deviez porter votre code SQL vers une autre base de données, utilisez des guillemets doubles.

55

Pour moi, il est très logique de les utiliser à tout moment pour traiter les noms de champs.

  • Premièrement, une fois que vous avez pris l'habitude, il ne fait pas mal de simplement appuyer sur la touche du coup en arrière. 
  • Deuxièmement, pour moi, il est plus facile de voir quels sont exactement les champs de votre requête et quels sont les mots-clés ou les méthodes.
  • Enfin, il vous permet d’utiliser le nom de champ que vous souhaitez lors de la conception de votre table. Parfois, il est tout à fait judicieux de nommer un champ "clé", "ordre" ou "valeurs" ... qui requièrent toutes des backticks pour s'y référer.
42
nickf

Les backticks ne font pas partie de la norme ANSI SQL. De le manuel mysql :

Si le mode SQL ANSI_QUOTES est activé, il est également possible de citer identifiants entre guillemets

Donc, si vous utilisez des backticks et que vous décidez ensuite de vous éloigner de MySQL, vous rencontrez un problème (bien que vous ayez probablement aussi de plus gros problèmes).

24
Greg

Il n’ya rien de mal à continuer d’utiliser MYSQL, à part peut-être le caractère visuel des requêtes. Mais ils permettent l'utilisation de mots-clés réservés ou d'espaces incorporés en tant que noms de tables et de colonnes. Ceci est un non-non avec la plupart des moteurs de base de données et empêchera toute migration à une date ultérieure.

Pour faciliter la lecture, beaucoup de gens utilisent des majuscules pour les mots-clés SQL, par exemple.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
8

Si vous me le demandez, il faut toujours utiliser des piqûres. Mais il y a certaines raisons pour lesquelles une équipe peut préférer ne pas les utiliser.

Avantages:

  • En les utilisant, il n'y a pas de mots réservés ni de caractères interdits.
  • Dans certains cas, vous obtenez des messages d'erreur plus descriptifs.
  • Si vous évitez les mauvaises pratiques, cela vous est égal, mais ... dans Word, elles sont parfois un moyen décent d'éviter les injections SQL.

Désavantages:

  • Ils ne sont pas standard et ne sont généralement pas portables. Cependant, tant que vous n'utilisez pas de backtick dans le cadre d'un identifiant (ce qui est la pire pratique que je puisse imaginer), vous pouvez transférer votre requête en supprimant automatiquement les backticks.
  • Si certaines de vos requêtes proviennent d'Access, ils peuvent citer des noms de table avec "(et vous ne pouvez peut-être pas supprimer tous les" à l'aveuglette). Cependant, les mélanges de backticks et de guillemets doubles sont autorisés.
  • Certains logiciels ou fonctions stupides filtrent vos requêtes et ont des problèmes de backticks. Cependant, ils font partie de ASCII, cela signifie donc que votre logiciel/fonction est très mauvais.
6
Federico

Il est beaucoup plus facile de rechercher dans votre base de code quelque chose d’arrière-plan. Supposons que vous ayez une table nommée event. grep -r "event" * peut renvoyer des centaines de résultats. grep -r "\`event\`" * retournera tout ce qui fait probablement référence à votre base de données. 

5
EllisGL

Pour autant que je sache, le but ultime de l'utilisation de backticks est de vous permettre d'utiliser des noms qui coïncident avec des mots clés réservés. Donc, si le nom n'entre pas en conflit avec un mot clé réservé, je ne vois aucune raison d'utiliser des backticks. Mais ce n'est pas une raison pour les interdire non plus.

4

Simple chose à propos de backtick `` est utilisé pour dénoter un identifiant comme nom_bdd, nom_table, etc., et guillemet simple '' , guillemet double "" pour les littéraux de chaîne, alors que "" sert à imprimer tel quel et '' affiche la variable value hold ou, dans un autre cas, imprime le texte qu'il a.

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..
2
Sonpal singh Sengar

La principale utilisation des backticks (`) dans SQL est de les utiliser dans les cas où vous allez les rappeler dans les clauses à venir. En tout temps, il est recommandé d'utiliser des guillemets doubles (""). 

Par exemple

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;

Dans l’instruction ci-dessus, voyez-vous comment Publisher and Location est utilisé à nouveau dans la clause GROUP BY.

À la place d'utiliser 

GROUPE PAR Nom, ville, code de la route

Je viens d'utiliser

GROUP BY Publisher and Location

Ce n'est que lorsque de telles situations se produisent qu'il est utile d'utiliser des backtick. Dans tous les autres cas, il est recommandé d'utiliser des guillemets doubles.

0
Command

si vous utilisez des noms de champs comme valeurs par défaut mysql ou mssql, par exemple "status", vous devez utiliser des backticks ("select status from table_name" ou "select id of table_name où status = 1") . erreurs ou ne fonctionne pas la requête.

0
ysrtymz