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 de mal à utiliser des backticks autour des noms de champs dans MySQL .
C'est:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
count
,type
,table
ou similairecount
,type
ettable
. Ce sont des termes terriblement ambigus et dans presque tous les cas, ces noms pourraient être améliorés pour être plus précis. Nommer vos colonnes des choses comme ça est également dangereux et une source potentielle d'erreurs, car vous ne savez jamais quand quelqu'un pourrait oublier d'ajouter les backticks ou ne pas se rendre compte qu'il doit le faire. Je pense qu'il vaut mieux éviter d'utiliser des termes réservés comme noms de colonnes.Réponses:
L'utilisation de backticks vous permet d'utiliser des caractères alternatifs. Dans l'écriture de requêtes, ce n'est pas un tel 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
Ce qui génère bien sûr des tables mal nommées.
Si vous êtes juste concis, je ne vois pas de problème avec cela, vous remarquerez si vous exécutez votre requête en tant que telle
L'avertissement généré qui revient aura des contre-graduations et des noms de table complets. Donc, si vous utilisez des fonctionnalités de génération de requêtes et une réécriture automatisée des requêtes, les backticks rendraient l'analyse de votre code moins confuse.
Je pense cependant qu'au lieu de demander si vous pouvez ou non utiliser des backticks, ils devraient avoir une norme pour les noms. Cela résout des problèmes plus «réels».
la source
select count from foo
vsselect "count" from foo
donnera des résultats très différents. Mais postgres diffère de mysql de deux manières: 1. Les champs sont indiqués par""
. 2. Les champs non cotés sont insensibles à la casse postgresql.org/docs/current/static/…Le seul problème avec les 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 SQL vers une autre base de données, utilisez des guillemets doubles.
la source
range
ou quelque chose comme ça. Lorsque nous sommes passés à MySQL 5, cela a échoué parce que c'était un nouveau mot réservé!app_key_stores
WHERE ("key" = 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Requête OK, 0 ligne affectée (0,00 sec) SUPPRIMER DE Oapp_key_stores
(key
= 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Requête OK, 5 lignes affectées (0,00 s)Pour moi, il est très logique de les utiliser à tout moment lorsque vous traitez des noms de champs.
la source
Les backticks ne font pas partie du SQL ANSI standard. Depuis le manuel mysql :
Donc, si vous utilisez des backticks et que vous décidez ensuite de vous éloigner de MySQL, vous avez un problème (bien que vous ayez probablement aussi des problèmes beaucoup plus importants)
la source
Il n'y a rien de mal si vous continuez à utiliser MYSQL, sauf peut-être la flou visuelle des requêtes. Mais ils permettent l'utilisation de mots-clés réservés ou d'espaces incorporés comme noms de table et de colonne. Ceci est un non-non avec la plupart des moteurs de base de données et empêchera toute migration ultérieure.
Pour faciliter la lecture, de nombreuses personnes utilisent des majuscules pour les mots-clés SQL, par exemple.
la source
Si vous me le demandez, les backticks doivent toujours être utilisés. Mais il y a certaines raisons pour lesquelles une équipe peut préférer ne pas les utiliser.
Avantages:
Désavantages:
la source
Il est beaucoup plus facile de rechercher dans votre base de code quelque chose dans les backticks. Disons que vous avez une table nommée
event
.grep -r "event" *
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 source
Eh bien, pour autant que je sache, tout le but de l'utilisation des 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 collision avec un mot-clé réservé, je ne vois aucune raison d'utiliser des backticks. Mais ce n'est pas non plus une raison de les interdire.
la source
Simple chose à propos backtick `` est utilisé pour désignent identifiant comme bdd, nom_table etc, et guillemet simple « » , guillemet « » pour les littéraux de chaîne, alors que « » l' utilisation de la valeur d'impression telle qu'elle est et « » imprimer la cale variable de valeur ou dans un autre cas, imprimez le texte qu'il a.
la source
si vous utilisez certains 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 from table_name wherestatus
= 1"). car mysql renvoie des erreurs ou ne fonctionne pas la requête.la source
L'utilisation principale des backticks (`) en SQL est de les utiliser dans des situations où vous allez les appeler à nouveau dans les clauses à venir. À chaque autre fois, il est recommandé d'utiliser des guillemets doubles ("").
Par exemple
Dans l'instruction ci-dessus, voyez-vous comment
Publisher and Location
est utilisé à nouveau dans laGROUP BY
clause.À la place d'utiliser
Je viens d'utiliser
Ce n'est que lorsque de telles situations se présentent, qu'il est utile d'utiliser des backticks. Dans tous les autres cas, l'utilisation de guillemets doubles est recommandée.
la source