web-dev-qa-db-fra.com

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

Dans MySQL, nous pouvons créer des requêtes avec ou sans le backtick (`) symbole. 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 (`) sur des requêtes simples?

26
Satish Pandey

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 COUNT est 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.

34
Mr.Brownstone

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

Cela fonctionne dans MySQL, PostgreSQL, SQL Server, Oracle, etc. etc. Pour MySQL, vous pourriez avoir besoin du mode SQLansi_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.

24
Frank Heikens

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.

6
Rob Farley

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`;
3
HVNSweeting

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 non généralement 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 la colonne atable existe mais que la colonne notexistingcolumn 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 notexistingcolumn 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 avec des crochets, y compris l'alias, et essayez d'éviter d'utiliser des mots réservés et des caractères étranges pour les identificateurs.

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

1
PhoneixS