ошибки вставки MySQL ... не уверен, что не так - PullRequest
3 голосов
/ 29 марта 2011

Я не могу понять, почему это не работает.используя версию mysql 5.0.91-log.и phpMyAdmin

INSERT INTO 'sequences'(
'key', 'author', 'tlength', 'progress', 'time')
VALUES (
NULL , '00000', 10, 1, NULL
) 

получает следующую ошибку:

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL> для правильного синтаксиса для использования рядом с '' sequence '(' key ',' author ',' tlength ',' progress ',' time ') VALUES (NULL,' в строке)1

вот таблица (имя, тип, атрибуты, null, default, extra)

key        int(11)     UNSIGNED   No                        auto_increment
author     char(20)               No        
tlength    tinyint(3)  UNSIGNED   No        
progress   tinyint(4)  UNSIGNED   No    0   
time       timestamp              Yes   CURRENT_TIMESTAMP

я пробовал много комбинаций вышеуказанного запроса с / без кавычек идругие варианты. есть идеи?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

Две вещи:

  • Не заключайте в кавычки имя таблицы или поля
  • «Ключ» - это зарезервированное слово в MySQL, поэтому вам нужно заключить это имя поля в обратные черты

это даст вам:

INSERT INTO sequences (
`key`, author, tlength, progress, time)
VALUES (
NULL , '00000', 10, 1, NULL
) 

на всякий случай часто проще просто заключить в кавычки все имена полей и таблиц, но вот полный список всех зарезервированных словкоторый может поймать вас: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

3 голосов
/ 29 марта 2011

Заменить кавычки на обратные кавычки для имен таблиц и столбцов:

INSERT
INTO    `sequences` (`key`, `author`, `tlength`, `progress`, `time`)
VALUES  (NULL, '00000', 10, 1, NULL) 
3 голосов
/ 29 марта 2011

По умолчанию не следует указывать имена таблиц в кавычках.Попробуйте:

INSERT INTO sequences (
    'key', 'author', 'tlength', 'progress', 'time')
VALUES (
    NULL , '00000', 10, 1, NULL
) 
0 голосов
/ 29 марта 2011

Как и в большинстве других языков, кавычки используются в качестве разделителей строк, поэтому интерпретатор может отличить ключевое слово от литерала.Просто запустите этот запрос, чтобы увидеть разницу:

SELECT 'CURRENT_TIMESTAMP', CURRENT_TIMESTAMP

Если вы заключите в кавычки имена таблиц и столбцов, вы сообщаете MySQL, что они являются , а не объектами базы данных.у вас есть столбец с именем key.Это зарезервированное слово в MySQL, вам нужно избегать его.Синтаксис, используемый MySQL для таких случаев: back цитата:

INSERT INTO sequences (`key`, author, tlength, progress, time)
VALUES (NULL , '00000', 10, 1, NULL)

И последнее, но не менее важное: нельзя вставить NULL в столбец key, если вы определили его как1015 *.Вот что означает NOT NULL.

...