2017-02-13 76 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