Question

Après avoir lu quelques réponses et commentaires sur certaines questions SQL ici, et entendu également qu'un de mes amis travaille dans un endroit qui a une politique qui les interdit, je me demande s'il y a quelque chose qui cloche dans l'utilisation de backtick sur le terrain noms dans MySQL.

C'est-à-dire:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
Était-ce utile?

La solution

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 vous supposez que vous pouvez utiliser des backticks, je suppose que cela vous permet de 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 ça, vous remarquerez que si vous exécutez votre requête en tant que telle

EXPLAIN EXTENDED Select foo,bar,baz 

L'avertissement généré renvoyé aura des ticks et des noms de table qualifiés complets. 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.

Cependant, 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 problèmes "réels".

Autres conseils

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 est possible que vous deviez porter votre code SQL vers une autre base de données, utilisez des guillemets doubles.

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

  • Tout d'abord, une fois que vous avez pris l'habitude, il ne fait pas de mal d'appuyer sur la touche du coup d'arrêt.
  • Deuxièmement, 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 de votre choix lors de la conception de votre table. Parfois, il est tout à fait judicieux de nommer un champ "clé", "commande", ou "valeurs" ... qui nécessitent tous des backticks pour s'y référer.

Les backticks ne font pas partie du SQL ANSI standard. le manuel mysql :

  

Si le mode SQL ANSI_QUOTES est   activé, il est également permis 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)

Il n’ya rien de mal à continuer à utiliser MYSQL, si ce n’est 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, de nombreuses personnes utilisent des majuscules pour les mots-clés SQL, par exemple.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

Si vous me le demandez, vous devez toujours utiliser des piques. Cependant, une équipe peut préférer ne pas les utiliser pour certaines raisons.

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 ... en vrai, elles constituent parfois un moyen décent d'éviter les injections SQL.

Inconvénients:

  • Ils ne sont pas standard et ne sont généralement pas portables. Cependant, tant que vous n'utilisez pas un 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 les noms de table avec " (et peut-être que vous ne pouvez pas supprimer tous les "aveuglément"). Toutefois, les mélanges entre guillemets et guillemets sont autorisés.
  • Certains logiciels ou fonctions stupides filtrent vos requêtes et ont des problèmes de backticks. Cependant, comme ils font partie d’ASCII, cela signifie que votre logiciel / votre fonction est très mauvais.

Eh bien, pour autant que je sache, le but 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.

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 " événement " * peut renvoyer des centaines de résultats. grep -r " \ `event \` " * renverra tout ce qui fait probablement référence à votre base de données.

La chose simple à propos de backtick `` est utilisé pour désigner un identifiant tel que nom_base_données, nom_table, etc., et guillemets simples '' , guillemets doubles " / strong> pour les littéraux de chaîne, alors que " " utiliser pour imprimer la valeur telle quelle et '' imprimer la valeur maintenue ou, dans un autre cas, imprimer 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..

si vous utilisez certains noms de champs comme valeurs par défaut mysql ou mssql, par exemple, "status", vous devez utiliser des backticks (" sélectionner status dans nom_table "ile ou "sélectionner id dans nom_table où status = 1 "). parce que mysql renvoie des erreurs ou ne fonctionne pas la requête.

La principale utilisation de 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 la déclaration ci-dessus, voyez-vous comment Publisher and Location est à nouveau utilisé dans la clause GROUP BY .

Au lieu d'utiliser

  

GROUP BY Nom, ville, code de la route

Je viens d'utiliser

  

GROUP BY Editeur et emplacement

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top