Mysql
 sql >> база данни >  >> RDS >> Mysql

Синтактична грешка поради използването на запазена дума като име на таблица или колона в MySQL

Проблемът

В MySQL определени думи като SELECT , INSERT , DELETE и т.н. са запазени думи. Тъй като те имат специално значение, MySQL го третира като синтактична грешка всеки път, когато ги използвате като име на таблица, име на колона или друг вид идентификатор - освен ако не заобиколите идентификатора с обратни отметки.

Както е отбелязано в официалните документи, в раздел 10.2 Имена на обекти на схема (ударението е добавено):

Определени обекти в MySQL, включително база данни, таблица, индекс, колона, псевдоним, изглед, съхранена процедура, дял, пространство за таблици и други имена на обекти, са известни като идентификатори .

...

Ако идентификаторът съдържа специални знаци или е резервирана дума , вие трябва цитирайте го винаги, когато се позовавате на него.

...

Идентификаторът за кавички е отметката („` "):

Пълен списък с ключови думи и запазени думи можете да намерите в раздел 10.3 Ключови думи и Запазени думи . На тази страница думите, последвани от "(R)", са запазени думи. Някои запазени думи са изброени по-долу, включително много, които са склонни да причинят този проблем.

  • ДОБАВЯНЕ
  • И
  • ПРЕДИ
  • ОТ
  • ОБАДИ се
  • СЛУЧАЙ
  • СЪСТОЯНИЕ
  • ИЗТРИВАНЕ
  • DESC
  • ОПИСАЙТЕ
  • ОТ
  • ГРУПА
  • В
  • ИНДЕКС
  • ВМЪКНЕТЕ
  • ИНТЕРВАЛ
  • И
  • КЛЮЧ
  • Харесвам
  • LIMIT
  • ДЪЛГО
  • МАЧИ
  • НЕ
  • ОПЦИЯ
  • ИЛИ
  • ПОРЪЧАЙТЕ
  • ДЯЛ
  • РАНГ
  • РЕФЕРЕНЦИИ
  • ИЗБЕРЕТЕ
  • ТАБЛИЦА
  • ДО
  • АКТУАЛИЗИРАНЕ
  • КЪДЕ

Решението

Имате две опции.

1. Не използвайте запазени думи като идентификатори

Най-простото решение е просто да избягвате използването на запазени думи като идентификатори. Вероятно можете да намерите друго разумно име за колоната си, което не е запазена дума.

Това има няколко предимства:

  • Това елиминира възможността вие или друг разработчик, използващ вашата база данни, случайно да напишете синтактична грешка поради забравяне или незнание, че даден идентификатор е запазена дума. В MySQL има много запазени думи и е малко вероятно повечето разработчици да знаят всички от тях. Като не използвате тези думи на първо място, вие избягвате да оставяте капани за себе си или бъдещите разработчици.

  • Средствата за цитиране на идентификатори се различават между SQL диалектите. Докато MySQL използва backtick за цитиране на идентификатори по подразбиране, ANSI-съвместим SQL (и наистина MySQL в ANSI SQL режим, както е отбелязано тук ) използва двойни кавички за цитиране на идентификатори. Като такива, заявките, които цитират идентификатори с обратни отметки, са по-малко лесно преносими към други SQL диалекти.

Само с цел намаляване на риска от бъдещи грешки, това обикновено е по-мъдър начин на действие, отколкото цитиране на идентификатора.

2. Използвайте отметки

Ако преименуването на таблицата или колоната не е възможно, увийте идентификатора в нарушение в обратни тикчета (` ) както е описано в по-ранния цитат от 10.2 Имена на обекти на схема .

Пример за демонстриране на употребата (взет от 10.3 Ключови думи и запазени думи ):

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax.
near 'interval (begin INT, end INT)'

mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.01 sec)

По същия начин, заявката от въпроса може да бъде коригирана чрез обвиване на ключовата дума key в обратни отметки, както е показано по-долу:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Как да копирам редове, но да променям няколко полета?

  2. Функция MySQL SQRT() – Връща квадратния корен от число в MySQL

  3. MySQL:ALTER IGNORE TABLE ADD UNIQUE, какво ще бъде съкратено?

  4. Използване на разширени функции на Oracle JDeveloper за MySQL бази данни

  5. Как да направите обратен инженеринг на база данни в MySQL Workbench