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

Как мога да поправя MySQL грешка #1064?

TL;DR

Грешка #1064 означава, че MySQL не може да разбере вашата команда. За да го поправите:

  • Прочетете съобщението за грешка. Той ви казва къде точно във вашата команда MySQL се обърка.

  • Проверете командата си. Ако използвате език за програмиране, за да създадете вашата команда, използвайте echo , console.log() , или негов еквивалент за показване на цялата команда така че можете да го видите.

  • Проверете ръководството. Като се сравнява с това, което MySQL очаква в този момент , проблемът често е очевиден.

  • Проверете за запазени думи. Ако грешката е възникнала в идентификатор на обект, проверете дали не е запазена дума (и ако е, уверете се, че е правилно цитирана).

  1. Аааа!! Какво означава #1064 означава ?

    Съобщенията за грешки може да изглеждат като gobbledygook, но те са (често) невероятно информативни и предоставят достатъчно подробности, за да се определи какво се е объркало. Като разберете точно какво ви казва MySQL, можете да се въоръжите, за да отстраните всеки проблем от този вид в бъдеще.

    Както в много програми, MySQL грешките се кодират според типа на възникнал проблем. Грешка №1064 е синтактична грешка.

    • Какъв е този „синтаксис“, за който говорите? Магьосничество ли е?

      Докато "синтаксис" е дума, която много програмисти срещат само в контекста на компютрите, тя всъщност е заимствана от по-широката лингвистика. Отнася се до структурата на изречението:т.е. правилата на граматиката; или, с други думи, правилата, които определят какво представлява валидно изречение в рамките на езика.

      Например, следното английско изречение съдържа синтактична грешка (тъй като неопределен член "a" винаги трябва да предхожда съществително):

      Това изречение съдържа синтактична грешка a.

    • Какво общо има това с MySQL?

      Всеки път, когато някой издаде команда на компютър, едно от първите неща, които той трябва да направи, е да "анализира" тази команда, за да я разбере. „Синтактична грешка“ означава, че анализаторът не може да разбере какво се иска, защото не представлява валидна команда в рамките на езика:с други думи, командата нарушава граматиката на езика за програмиране .

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

  2. Как да го поправя?

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

    • Прочетете съобщението!

      MySQL не само ни казва точно където анализаторът е срещнал синтактична грешка, но също така прави предложение за коригирането й. Например, помислете за следната SQL команда:

      UPDATE my_table WHERE id=101 SET name='foo'
      

      Тази команда дава следното съобщение за грешка:

      ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=101 SET name='foo'' at line 1

      MySQL ни казва, че всичко изглеждаше добре до думата WHERE , но тогава възникна проблем. С други думи, не очакваше да срещне WHERE в този момент.

      Съобщения, които казват ...near '' at line... просто означава, че краят на командата е възникнал неочаквано:тоест нещо друго трябва да се появи, преди командата да приключи.

    • Проверете действителния текст на вашата команда!

      Програмистите често създават SQL команди, използвайки език за програмиране. Например php програма може да има (грешен) ред като този:

      $result = $mysqli->query("UPDATE " . $tablename ."SET name='foo' WHERE id=101");
      

      Ако напишете това на два реда

      $query = "UPDATE " . $tablename ."SET name='foo' WHERE id=101"
      $result = $mysqli->query($query);
      

      след това можете да добавите echo $query; или var_dump($query) за да видите, че заявката всъщност казва

      UPDATE userSET name='foo' WHERE id=101
      

      Често ще видите грешката си веднага и ще можете да я поправите.

    • Спазвайте заповедите!

      MySQL също така препоръчва да „проверим ръководството, което съответства на нашата MySQL версия за правилния синтаксис, който да използваме ". Нека направим това.

      Използвам MySQL v5.6, така че ще се обърна към ръчно въвеждане на тази версия за UPDATE команда . Първото нещо на страницата е граматиката на командата (това е вярно за всяка команда):

      UPDATE [LOW_PRIORITY] [IGNORE] table_reference
          SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
          [WHERE where_condition]
          [ORDER BY ...]
          [LIMIT row_count]
      

      Ръководството обяснява как да тълкувате този синтаксис под Конвенции за типографски и синтаксис , но за нашите цели е достатъчно да признаем, че:клаузи, съдържащи се в квадратни скоби [ и ] са по избор; вертикални ленти | посочете алтернативи; и многоточия ... означават или пропуск за краткост, или че предходната клауза може да се повтори.

      Вече знаем, че анализаторът вярваше, че всичко в нашата команда е наред преди WHERE ключова дума или с други думи до и включително препратката към таблицата. Поглеждайки към граматиката, виждаме, че table_reference трябва да бъде последвано от SET ключова дума:докато в нашата команда тя всъщност беше последвана от WHERE ключова дума. Това обяснява защо анализаторът съобщава, че в този момент е възникнал проблем.

    Бележка за резервация

    Разбира се, това беше прост пример. Въпреки това, като следвате двете стъпки, описани по-горе (т.е. наблюдавайки точно къде в командата анализаторът установи, че граматиката е нарушена и сравни с описанието в ръководството на какво се очакваше в този момент ), почти всяка синтактична грешка може лесно да бъде идентифицирана.

    Казвам „практически всички“, защото има малък клас проблеми, които не са толкова лесни за забелязване — и това е мястото, където анализаторът вярва, че срещнатият езиков елемент означава едно, докато вие възнамерявате да означава друго. Вземете следния пример:

    UPDATE my_table SET where='foo'
    

    Отново, анализаторът не очаква да срещне WHERE в този момент и така ще доведе до подобна синтактична грешка - но не сте предвидили това where да бъде SQL ключова дума:имахте намерение да идентифицира колона за актуализиране! Въпреки това, както е документирано под Имена на обекти на схема :

    Ако идентификаторът съдържа специални знаци или е запазена дума, вие трябва цитирайте го винаги, когато се позовавате на него. (Изключение:Запазена дума, която следва точка в квалифицирано име, трябва да бъде идентификатор, така че не е необходимо да се цитира.) Запазените думи са изброени в Раздел 9.3, „Ключови думи и запазени думи“ .

    [ deletia ]

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

    mysql> SELECT * FROM `select` WHERE `select`.id > 100;

    Ако ANSI_QUOTES SQL режимът е активиран, също така е позволено да се цитират идентификатори в двойни кавички:

    mysql> CREATE TABLE "test" (col INT);
    ERROR 1064: You have an error in your SQL syntax...
    mysql> SET sql_mode='ANSI_QUOTES';
    mysql> CREATE TABLE "test" (col INT);
    Query OK, 0 rows affected (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групиране на клаузи WHERE в Codeigniter

  2. Използвайте MySQL релационни бази данни във Fedora 12

  3. Как да конвертирате epoch в mySQL timestamp в JAVA

  4. Как да активирам INNODB в mysql

  5. Как да съкратите таблица с ограничен външен ключ?