Erreur de syntaxe MySQL : problèmes causés par l'utilisation de mots réservés comme noms de tables ou de colonnes
P粉937769356
2023-08-21 20:17:23
<p>J'essaie d'exécuter la requête MySQL simple suivante : </p>
<pre class="brush:sql;toolbar:false;">INSERT INTO user_details (nom d'utilisateur, emplacement, clé)
VALEURS ('Tim', 'Florida', 42)
≪/pré>
<p>Mais j'obtiens l'erreur suivante :</p>
<blockquote>
<p>ERREUR 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de <code>'key) VALEURS ('Tim', ' Floride', 42)'&Lt ;/code> ; à la ligne 1&Lt ;/p> ;
</blockquote>
<p>Comment résoudre ce problème ? </p>
Question
Dans MySQL, certains mots tels que
SELECT
,INSERT
,DELETE
sont des mots réservés. Parce qu'ils ont une signification particulière, MySQL les traite comme une erreur de syntaxe lorsque vous les utilisez comme noms de tables, noms de colonnes ou autres types d'identifiants - à moins que vous ne mettiez l'identifiant entre des guillemets.Comme indiqué dans la documentation officielle, dans la section 10.2 Noms des objets de schéma (c'est nous qui soulignons) :
La liste complète des mots-clés et mots réservés se trouve dans la section 10.3 Mots-clés et mots réservés . Dans cette page, les mots avec "(R)" sont des mots réservés. Certains mots réservés sont répertoriés ci-dessous, dont beaucoup peuvent être à l'origine de ce problème.
Solution
Vous avez deux options.
1. N'utilisez pas de mots réservés comme identifiants
La solution la plus simple est d'éviter d'utiliser des mots réservés comme identifiants. Vous pourrez peut-être trouver un autre nom de colonne raisonnable qui n'est pas un mot réservé.
Il y a plusieurs avantages à faire cela :
Cela élimine la possibilité que vous ou d'autres développeurs travaillant avec votre base de données écriviez accidentellement des erreurs de syntaxe parce qu'ils ont oublié ou ne savaient pas qu'un identifiant spécifique était un mot réservé. Il existe de nombreux mots réservés dans MySQL et il est peu probable que la plupart des développeurs les connaissent tous. En n’utilisant pas ces mots en premier lieu, vous évitez de tendre un piège à vous-même ou aux futurs développeurs.
La façon dont les identifiants sont cités diffère selon les dialectes SQL. Alors que MySQL utilise des guillemets pour citer les identifiants par défaut, SQL conforme à ANSI (et MySQL en mode ANSI SQL, comme décrit ici) utilise des guillemets doubles pour citer les identifiants. Par conséquent, les requêtes qui utilisent des backticks pour citer les identifiants sont moins portables vers d’autres dialectes SQL.
Pour réduire les risques d'erreurs futures, il est souvent plus judicieux que de citer les identifiants avec des backticks.
2. Utilisez des backticks
Si la table ou la colonne ne peut pas être renommée, entourez-la entre guillemets () comme décrit dans la section 10.2 Noms d'objet de schéma
`
précédemment référencée.Voici un exemple illustrant l'utilisation (tiré de 10.3 Mots-clés et mots réservés) :
Encore une fois, la requête dans la question peut être corrigée en enveloppant le mot-clé
key
entre des guillemets, comme ceci :