2012-08-02 125 views
0
CREATE TABLE `assessmentbookdb`.`MCQs` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `MCQAnswer` VARCHAR(200) NOT NULL , 
    `QuestionID` INT NOT NULL , 
    PRIMARY KEY (`id`) , 
    INDEX `QuestionID` (`QuestionID` ASC) , 
    CONSTRAINT `QuestionID` 
    FOREIGN KEY (`QuestionID`) 
    REFERENCES `assessmentbookdb`.`Question` (`QuestionID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

消息日誌表:MySQL不能創建外鍵

錯誤1005:無法創建表 'assessmentbookdb.mcqs'(錯誤:121) SQL語句:

CREATE TABLE `assessmentbookdb`.`MCQs` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `MCQAnswer` VARCHAR(200) NOT NULL , 
    `QuestionID` INT NOT NULL , 
    PRIMARY KEY (`id`) , 
    INDEX `QuestionID` (`QuestionID` ASC) , 
    CONSTRAINT `QuestionID` 
    FOREIGN KEY (`QuestionID`) 
    REFERENCES `assessmentbookdb`.`Question` (`QuestionID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
    ENGINE = InnoDB 

回答

0

表創建失敗,因爲一個外鍵約束被不正確形成

不知您˚F外鍵不正確。這可能是因爲您所引用的表格尚不存在。

+0

問題表已存在,QuestionID是問題表的主鍵。我找不到有什麼問題 – 2012-08-02 10:37:31

6

仔細檢查:

  • 關鍵的名字是唯一的
  • 兩個關鍵你耦合具有完全相同的數據類型(這裏:INT NOT NULL),甚至是符號性其實
  • 的引用字段存在
+0

所有檢查已經完成。仍然是相同的錯誤 – 2012-08-02 10:39:57

+2

然而在另一個不同的答案中,你寫了「*哦,你好,我有相同的約束名。*」 - 所以你沒有檢查它。 – 2012-08-02 10:47:01

+0

正如這篇文章的建議,確保他們是相同的signedess。我檢查了完全相同的數據類型 - 都在bigint(20) - 但一個是簽名的,另一個是未簽名的。我讓他們一樣,它的工作。 – thedude 2017-01-20 16:55:46

2

基於谷歌搜索我會假設你有一個約束,存在與你嘗試添加一個約束相同的名稱。這可能是因爲你沒有從表格的舊版本中刪除舊約束。

+0

哦,你好,我有相同的約束名稱。 Thx很多 – 2012-08-02 10:43:43

+1

請點擊「接受答案」,然後;) – 2012-08-02 11:05:50

0

看一看Here並嘗試不給出約束的名稱。

-1

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

InnoDB支持外鍵,這讓跨表和外鍵約束,這有助於保持該展開的數據是一致的,你交叉引用相關數據。 CREATE TABLE或ALTER TABLE語句中的InnoDB外鍵約束定義的語法如下所示:

[CONSTRAINT [symbol]] FOREIGN KEY 
[index_name] (index_col_name, ...) 
REFERENCES tbl_name (index_col_name,...) 
[ON DELETE reference_option] 
[ON UPDATE reference_option] 

reference_option: 
RESTRICT | CASCADE | SET NULL | NO ACTION