Maison  >  Questions et réponses  >  le corps du texte

Erreurs de syntaxe causées par l'utilisation de mots réservés comme noms de tables ou de colonnes dans MySQL

J'essaie d'exécuter une simple requête MySQL comme celle-ci :

INSERT INTO user_details (username, location, key)
VALUES ('Tim', 'Florida', 42)

Mais j'obtiens l'erreur suivante :

Erreur 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel de la version de votre serveur MySQL pour connaître la syntaxe correcte à utiliser près de la ligne 1 'key) VALUES ('Tim', 'Florida', 42)'

Comment résoudre ce problème ?

P粉726234648P粉726234648392 Il y a quelques jours620

répondre à tous(1)je répondrai

  • P粉545910687

    P粉5459106872023-10-15 15:07:47

    Question

    Dans MySQL, certains mots tels que SELECTINSERTDELETE sont des mots réservés. Parce qu'ils ont une signification particulière, MySQL la traite comme une erreur de syntaxe chaque fois que 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 10.2 noms d'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 suivis de "(R)" sont des mots réservés. Certains mots réservés sont répertoriés ci-dessous, dont beaucoup ont tendance à provoquer ce problème.

    • Ajouter
    • et
    • avant
    • Auteur
    • Appel
    • CAS
    • Conditions
    • Supprimer
    • Ordre décroissant
    • Description
    • de
    • Groupe
    • à
    • Index
    • Insérer
    • Intervalle
    • Oui
    • Clé
    • AIME
    • Restrictions
    • LONGUE
    • Match
    • Non
    • Options
    • ou
    • Commandez
    • Partition
    • Classement
    • Références
    • Choisissez
    • TABLE
    • À
    • Mise à jour

    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 raisonnable pour votre colonne qui ne soit 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 la 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 créer des pièges pour vous-même ou pour les futurs développeurs.

    • La façon dont les identifiants sont cités diffère selon les dialectes SQL. Alors que MySQL utilise des backticks pour citer les identifiants par défaut, le SQL conforme à ANSI (en fait 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.

    Dans le seul but de réduire le risque d'erreurs futures, il s'agit généralement d'une approche plus intelligente que le backticking des identifiants.

    2. Utilisez le backtick

    Si la table ou la colonne ne peut pas être renommée, entourez l'identifiant en question entre des guillemets (`), comme dans le 10.2 Schema Object Name cité précédemment.

    Exemple démontrant 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 :

    INSERT INTO user_details (username, location, `key`)
    VALUES ('Tim', 'Florida', 42)";               ^   ^

    répondre
    0
  • Annulerrépondre