2017-02-13 84 views
0

编辑:请在发布您的答案之前仔细阅读该问题:(我知道UNIQUE不应该在这里,我使用MySQL Workbench来组织我的数据库,并且由于未知原因, UNIQUE在这里从今天早上这就是问题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 

这是正常的,id列不应该被标记为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即使我没有检查:

因为UNSIGNED是唯一的,我在我的模型得到这个错误每个表它也。

我所有的表都有同样的问题,我真的不知道如何解决它,而无需手动更改记事本中的所有语句。

你有什么想法为什么工作台有这种行为?这是Workbench 6.3.9,同一模型在6.3.6上也会出现相同的错误。

非常感谢您的帮助。

安东尼

+0

你不能在列定义中使用的唯一的。相反,您可以在列规格之后在该列上创建唯一索引。 –

回答

0

您错误地使用了UNIQUE关键字。它应该在列定义的末尾使用。

更改

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

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

OR

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

注意事项
当您将字段定义为PRIMARY时,您不需要明确指定UNIQUE选项。因为PRIMARY默认为UNIQUE。因此,由于idPRIMARY KEY,因此请停止使用UNIQUE

0

要使列具有唯一性,请在其上创建唯一索引。唯一关键字不应在列规范中。此外,通过将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