Avantages de l'utilisation du backtick (`) dans les requêtes MySQL?

25

Dans MySQL, nous pouvons créer des requêtes avec ou sans le `symbole backtick ( ). Exemple:

  1. SELECT * FROM TEST;
  2. SELECT * FROM `TEST`;

Les deux fonctionnent bien dans mysql-console.

Y a-t-il une différence technique entre eux?

Y a-t-il un avantage à utiliser ( `) par rapport aux requêtes simples?

Satish Pandey
la source

Réponses:

33

Ils sont appelés identificateurs entre guillemets et ils indiquent à l'analyseur de traiter le texte entre eux comme une chaîne littérale. Ils sont utiles lorsque vous avez une colonne ou un tableau contenant un mot clé ou un espace. Par exemple, ce qui suit ne fonctionnerait pas:

CREATE TABLE my table (id INT);

Mais ce qui suit:

CREATE TABLE `my table` (id INT);

En outre, ce qui suit obtiendrait une erreur, car il COUNTs'agit d'un mot clé réservé:

SELECT count FROM some_table

Mais ce qui suit serait analysé correctement:

SELECT `count` FROM some_table

J'espère que ceci vous aide.

Mr.Brownstone
la source
24

Si vous souhaitez utiliser quelque chose autour des identificateurs d'objet, utilisez au moins les guillemets standard: "

Cela fonctionne dans MySQL, PostgreSQL, SQL Server, Oracle, etc. etc. Pour MySQL, vous pourriez avoir besoin du mode SQL ansi_quotes , selon la configuration par défaut:

SET sql_mode = 'ANSI_QUOTES';

Les backticks `ne sont utilisés que dans MySQL, vous apprenez un type de SQL qui ne fonctionnera dans aucune autre marque de SGBD.

Frank Heikens
la source
6

Cela signifie que vous pouvez avoir des espaces dans les noms de table. Pas particulièrement attrayant, bien sûr. Même chose avec [] de SQL Server.

Rob Farley
la source
3

Cela peut être utile si vous avez une colonne dont le nom est réservé,

par exemple: Vous pouvez interroger une instruction comme celle-ci:

select * from tablename group by `group`;
HVNSweeting
la source
1

De mon point de vue, la réponse @ Mr.Brownstone n'est que partiellement correcte.

Le backtick `est utilisé dans MySQL pour délimiter les littéraux qui représentent des identificateurs (pas des chaînes).

Cela vous permet d'utiliser des caractères généralement non acceptés comme des espaces, des mots réservés, etc. comme identifiants. Par exemple:

SELECT * FROM `Strange table name`;

Il est également important qu'il permette également à l'analyseur de savoir si vous faites quelque chose de mal comme la sélection d'une colonne qui n'existe pas. Par exemple:

SELECT notexistingcolumn FROM atable;

Si atableexiste mais que la notexistingcolumncolonne n'existe pas, elle sera interprétée comme la chaîne littérale "notexistingcolumn" la sélectionnant comme valeur (et émettant probablement un avertissement).

Au lieu de cela, si vous utilisez:

SELECT `notexistingcolumn` FROM `atable`;

Il reconnaîtra que notexistingcolumnc'est le nom d'une colonne qui n'existe pas et générera une erreur.

Je pense qu'il est toujours préférable d'entourer les identifiants de backticks, y compris l'alias, et d'essayer d'éviter d'utiliser des mots réservés et des caractères étranges pour les identifiants.

Vous pouvez en savoir plus sur le backtick de MySQL sur https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
la source