MySql Workbench 语法错误

标签 mysql syntax unique workbench

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

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

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

感谢您的帮助:)

<小时/>

当我尝试将模型与数据库同步时,出现奇怪的错误。

创建表语句出错:

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 关键字。它应该用在列定义的末尾。

更改:

`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。因此,由于字段 id 是其上的 PRIMARY KEY,因此请停止对其使用 UNIQUE

关于MySql Workbench 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42204517/

相关文章:

php - 如何同步同一台机器上不同MySQL数据库的两个表?

php - 如何使用 INSERT...SELECT 根据表单输入将数据从一个表插入到另一个表

javascript - 为什么 .replace 方法使用正斜杠字符来括起第一个参数?

mysql - 如何唯一标识MySql中的数据库?

c# - 在 C#/WPF 中确定控件类型的最有效方法

syntax - "position"周围的双方括号在 Metal 语言中意味着什么?

mysql - 选择任何一个重复值的 ID 以仅从表中获取唯一列

php - MYSQL RANDOM SELECT UNIQUE ROWS - 排除先前选择的行

python - 如何在 Python 中内存类实例化?

php - 如何找出登录认证时要查找的数据库