2013-04-15 2 views
2

При запуске запроса ниже на PhpMyAdmin и Sequel, я получил следующее сообщение об ошибкена создание запроса

# 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с Ид Int БЕЗЗНАКОВЫЙ NOT NULL AUTO_INCREMENT, логин Char (128) NOT NULL, PASSW 'в строке 3.

Я не могу понять вне ошибки по этому запросу. Mysql работает в версии 5.5.25.

CREATE TABLE user 
(
  id Int UNSIGNED NOT NULL AUTO_INCREMENT, 
  login Char(128) NOT NULL, 
  password Char(128) NOT NULL, 
  emailaddress Char(128), 
  alternateemailaddress Char(128), 
  officephone Char(20), 
  officefax Char(20), 
  mobilephone Char(20), 
  client Int UNSIGNED, 
  facility Int UNSIGNED, 
  user_status Int UNSIGNED NOT NULL DEFAULT 0, 
  valid_from Datetime NOT NULL, 
  valid_to Datetime NOT NULL, 
  last_login Datetime, 
  last_login_from Char(48), 
  modified_by Int NOT NULL, 
  modified_time Datetime, 

 PRIMARY KEY (id), 
 FOREIGN KEY client REFERENCES client (id) ON DELETE CASCADE, 
 FOREIGN KEY facility REFERENCES facility (id) ON DELETE CASCADE 
  
 ) ENGINE = InnoDB 
  AUTO_INCREMENT = 0 
; 
+1

Тот же запрос, но без ошибок в mysql :) – gks

+0

@ TheUnlucky Я думаю, что ошибка вызвана копированием запроса. там могут быть скрытые символы или пробелы. Я попытался скопировать запрос из этого сообщения, но он все равно возвращает ошибку, в то же время по-разному ссылаясь на ссылки. это хорошо, когда я удаляю внешний ключ. спасибо за подтверждение запроса. – Pelang

ответ

1

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

CREATE TABLE `user` 
(
    `id` Int UNSIGNED NOT NULL AUTO_INCREMENT, 
    `login` Char(128) NOT NULL, 
    `password` Char(128) NOT NULL, 
    `emailaddress` Char(128), 
    `alternateemailaddress` Char(128), 
    `officephone` Char(20), 
    `officefax` Char(20), 
    `mobilephone` Char(20), 
    `client` Int UNSIGNED, 
    `facility` Int UNSIGNED, 
    `user_status` Int UNSIGNED NOT NULL DEFAULT 0, 
    `valid_from` Datetime NOT NULL, 
    `valid_to` Datetime NOT NULL, 
    `last_login` Datetime, 
    `last_login_from` Char(48), 
    `modified_by` Int NOT NULL, 
    `modified_time` Datetime, 

    PRIMARY KEY (`id`), 
    FOREIGN KEY (`client`) REFERENCES `client` (`id`) ON DELETE CASCADE, 
    FOREIGN KEY (`facility`) REFERENCES `facility` (`id`) ON DELETE CASCADE 

) ENGINE = InnoDB 
    AUTO_INCREMENT = 0 
; 
+0

спасибо за предложения. я удалил таблицу i, созданную, чтобы проверить, работает ли запрос со ссылками. когда я копирую и выполняю ваш запрос, я получил эту ошибку: «Невозможно создать таблицу« portal.user »(errno: 150)». – Pelang

+0

Можно ли добавить внешний ключ, если ссылочная таблица еще не создана? – Pelang

+1

Я думаю, что ваше поле id в 'client' и' facility' не имеет атрибута UNSIGNED. Попробуйте удалить UNSIGNED из полей 'client' и' facility' в моем варианте вашего запроса на создание, и вы увидите, что он будет работать. –

1

Это работает для меня.
См. Мой успешный SQLFiddle

Я подозреваю, что у вас есть некоторые странные символы пробела на вашем входе, возможно, вкладки.

+0

SQL Fiddle пуст? – gks

+0

Часть запроса пуста, но схема (создание таблицы) строит ОК. – Bohemian