2017-02-13 32 views
0

EDIT: Пожалуйста, прочтите эту проблему, прежде чем опубликовать свой ответ :(Я знаю, что UNIQUE не должен быть здесь. Я использую MySQL Workbench для организации моей базы данных и по неизвестной причине решил поставить УНИКАЛЬНО здесь с сегодняшнего утра. Это проблема.Ошибка синтаксиса MySql Workbench

Когда я создаю 10 таблиц со многими взаимосвязями, я синхронизую свою базу данных с диаграммой из MySql Workbench. Так как у меня есть «UNIQUE» там и там, я не могу синхронизировать что-либо, потому что я получил ошибки. И скопировать все вложения в блокнот для их отладки не вариант: p

Вопрос в том, почему MySql Workbench ставит эти неправильные UNIQUE в операторах create table?

Спасибо за вашу помощь :)


У меня странные ошибки, когда я пытаюсь синхронизировать модель с базой данных.

Создание таблицы заявление делает ошибку:

CREATE TABLE IF NOT EXISTS `barometres`.`brm_questions` ( 
`id` INT(10) UNIQUE UNSIGNED NOT NULL AUTO_INCREMENT, 
`theme_id` INT(10) UNIQUE UNSIGNED NOT NULL, 
`question_type_id` TINYINT(3) NOT NULL, 
`type` TINYINT(1) NULL DEFAULT NULL, 
`reference` TINYINT(1) NULL DEFAULT NULL, 
`created_at` DATETIME NOT NULL, 
`updated_at` DATETIME NULL DEFAULT NULL, 
`deleted_at` DATETIME NULL DEFAULT NULL, 
INDEX `fk_brm_questions_brm_themes1_idx` (`theme_id` ASC), 
INDEX `fk_brm_questions_brn_questions-types1_idx` (`question_type_id` ASC), 
PRIMARY KEY (`id`), 
CONSTRAINT `fk_brm_questions_brm_themes1` 
FOREIGN KEY (`theme_id`) 
REFERENCES `barometres`.`brm_themes` (`id`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_brm_questions_brn_questions-types1` 
FOREIGN KEY (`question_type_id`) 
REFERENCES `barometres`.`brn_questions-types` (`id`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 

Это нормально, столбец Идентификатор не должен быть помечен как UNIQUE (так как я не проверял его в Workbench) и UNSIGNED должны быть перед УНИКАЛЬНО в любом случае.

Поскольку UNSIGNED есть после UNIQUE, я получил эту ошибку для каждой таблицы в моей модели:

ERROR: Error 1064: 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 'UNSIGNED NOT NULL AUTO_INCREMENT, 
`theme_id` INT(10) UNIQUE UNSIGNED NOT NULL,' at line 2 

Как вы можете видеть, theme_id столбец также отмечен как UNIQUE, даже если я не проверял это тоже.

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

У вас есть вопросы, почему у workbench есть это поведение? Это Workbench 6.3.9, и та же модель делает ту же ошибку на 6.3.6

Большое спасибо за помощь.

Энтони

+0

Вы не можете использовать UNIQUE в определении столбца. Вместо этого вы создадите уникальный индекс в этом столбце после спецификаций столбца. –

ответ

0

Вы неправильно используете UNIQUE ключевое слово. Он должен использоваться в конце определения столбца.

Изменение:

`id` INT(10) UNIQUE UNSIGNED NOT NULL AUTO_INCREMENT 

Для:

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT -- UNIQUE keyword is removed 

ИЛИ:

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 

Примечание:
Не нужно использовать UNIQUE, если вы определяете поле как PRIMARY.
Потому что PRIMARY по умолчанию UNIQUE.Следовательно, поскольку поле id на нем PRIMARY KEY, остановите использование на нем UNIQUE.

0

Чтобы создать уникальный столбец, создайте на нем уникальный индекс. Нельзя использовать ключевое слово Unique в спецификации столбца. Кроме того, делая столбец id основным ключом, он также уникален.

Попробуйте вместо этого:

CREATE TABLE IF NOT EXISTS `barometres`.`brm_questions` ( 
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `theme_id` INT(10) UNSIGNED NOT NULL, 
    `question_type_id` TINYINT(3) NOT NULL, 
    `type` TINYINT(1) NULL DEFAULT NULL, 
    `reference` TINYINT(1) NULL DEFAULT NULL, 
    `created_at` DATETIME NOT NULL, 
    `updated_at` DATETIME NULL DEFAULT NULL, 
    `deleted_at` DATETIME NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    INDEX `fk_brm_questions_brm_themes1_idx` (`theme_id` ASC), 
    INDEX `fk_brm_questions_brm_questions-types1_idx` (`question_type_id` ASC), 
    UNIQUE INDEX `fk_brm_questions_brm_theme_id` (`theme_id`), 
    CONSTRAINT `fk_brm_questions_brm_themes1` 
     FOREIGN KEY (`theme_id`) 
     REFERENCES `barometres`.`brm_themes` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION, 
    CONSTRAINT `fk_brm_questions_brn_questions-types1` 
     FOREIGN KEY (`question_type_id`) 
     REFERENCES `barometres`.`brn_questions-types` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8