Syntaxfehler aufgrund der Verwendung eines reservierten Wortes als Tabellen- oder Spaltenname in MySQL
Ich versuche, führen Sie eine einfache MySQL-Abfrage wie folgt:
INSERT INTO user_details (username, location, key)
VALUES ('Tim', 'Florida', 42)
Aber ich bin immer der folgende Fehler:
Haben Sie einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax zur Verwendung in der Nähe von
'key) VALUES ('Tim', 'Florida', 42)'
in Zeile 1
Wie kann ich das Problem beheben?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem
In MySQL bestimmte Wörter wie
SELECT
INSERT
DELETE
etc. sind reservierte Wörter. Da Sie eine Besondere Bedeutung haben, MySQL-behandelt es als eine syntax-Fehlermeldung, wenn Sie verwenden Sie als Namen einer Tabelle, Spalte name, oder eine andere Art von Bezeichner - es sei denn, Sie umgeben den Bezeichner mit backticks.Wie bereits in den offiziellen docs, die in Abschnitt 10.2 Schema Object Names (Hervorhebung Hinzugefügt):
Eine vollständige Liste der Schlüsselwörter und reservierten Wörter finden Sie im Abschnitt 10.3 Schlüsselwörter und Reservierte Wörter. In diese Seite, Worte, gefolgt von "(R)" sind reservierte Wörter. Einige reservierte Wörter, die unten aufgelistet sind, darunter auch viele, die dazu neigen, die dieses Problem verursachen.
Die Lösung
Haben Sie zwei Möglichkeiten.
1. Nicht reservierte Wörter als Bezeichner
Die einfachste Lösung ist, einfach zu vermeiden Sie die Verwendung reservierter Wörter als Bezeichner. Sie können wahrscheinlich feststellen, einen anderen angemessenen Namen für die Spalte ein, ist nicht ein reserviertes Wort.
Tun, das hat ein paar Vorteile:
Beseitigt es die Möglichkeit, dass Sie oder ein anderer Entwickler mit Ihrer Datenbank versehentlich schreiben Sie einen syntax-Fehler aufgrund von vergessen oder nicht zu wissen -, dass ein bestimmter Bezeichner ein reserviertes Wort ist. Es gibt viele reservierte Wörter in MySQL und die meisten Entwickler wahrscheinlich nicht alle von Ihnen wissen. Nicht mit diesen Worten in den ersten Platz, Sie vermeiden, dass Sie fallen für Sie selbst oder für zukünftige Entwickler.
Das Mittel der Quotierung von Bezeichnern unterscheidet sich zwischen den SQL-Dialekten. Während MySQL backticks verwendet für die Quotierung von Bezeichnern standardmäßig ANSI-konforme SQL (und zwar MySQL im ANSI-SQL-Modus, wie bereits hier) verwendet, doppelte Anführungszeichen für die Quotierung von Bezeichnern. Als solche Abfragen, die quote identifiers mit backticks sind weniger leicht tragbar auf andere SQL-Dialekte.
Rein aus Gründen der Verringerung des Risikos von künftigen Fehlern, dies ist in der Regel klüger Vorgehen als "backtick" -unter Angabe der Kennung.
2. Benutze backticks
Umbenennen der Tabelle oder Spalte ist nicht möglich, wickeln Sie die beanstandeten Bezeichner in backticks (
`
), wie beschrieben in dem früheren Zitat aus 10.2 Schema Object Names.Ein Beispiel um die Verwendung zu demonstrieren (aus 10.3 Schlüsselwörter und Reservierte Wörter):
Ebenso die Abfrage aus der Frage, können behoben werden, durch das einwickeln der keyword -
key
in backticks, wie unten gezeigt:InformationsquelleAutor der Antwort