Dans MySQL, nous pouvons créer des requêtes avec ou sans le backtick (`
) symbole. Exemple:
SELECT * FROM TEST;
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?
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.
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.
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.
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`;
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 .