【问题标题】:MySql Workbench syntax errorMySql Workbench 语法错误
【发布时间】:2017-02-13 12:51:24
【问题描述】:

编辑:请在发布答案之前阅读问题:(我知道 UNIQUE 不应该在这里。我使用 MySQL Workbench 来组织我的数据库,并且由于未知原因,它决定从今天早上起,将 UNIQUE 放在这里。这就是问题所在。

当我创建 10 个具有许多关系的表时,我将我的数据库与 MySql Workbench 中的图表同步。由于我在那里和那里有一些“唯一”,我无法真正同步任何东西,因为我遇到了错误。并且将所有语句复制粘贴到记事本中以进行调试不是一种选择:p

问题是:为什么 MySql Workbench 将所有这些错误的 UNIQUE 放在 create table 语句中?

感谢您的帮助:)


当我尝试将我的模型与数据库同步时,我遇到了一个奇怪的错误。

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(因为我没有在 Workbench 中检查它),并且 UNSIGNED 应该在 UNIQUE 之前。

因为 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 6.3.9,同样的模型在6.3.6上做同样的错误

非常感谢您的帮助。

安东尼

【问题讨论】:

  • 您不能在列定义中使用 UNIQUE。相反,您在列规范之后在该列上创建一个唯一索引。

标签: mysql syntax unique workbench


【解决方案1】:

您错误地使用了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

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

【讨论】:

    【解决方案2】:

    要使列唯一,请在其上创建唯一索引。 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 
    

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 2011-02-08
      • 2013-07-19
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多