簡體   English   中英

MySQL無法使用外鍵創建表

[英]MySQL can't create table with foreign key

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;

消息日志:

錯誤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

仔細檢查一下:

  • 密鑰名稱是唯一的
  • 您要耦合的兩個鍵具有完全相同的數據類型(此處為INT NOT NULL ),甚至有符號
  • 引用字段實際存在

基於谷歌搜索,我會假設您有一個約束,該約束的名稱與您嘗試添加約束的名稱相同。 可能是您沒有從表的舊版本或其他內容中刪除舊約束。

表創建失敗,因為未正確形成外鍵約束

不知何故,您的外鍵不正確。 如果您要引用的表尚不存在,則可能是這種情況。

在這里看看,並嘗試不給您的約束起一個名字。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM