为什么我不能创建我的桌子?为什么这个FK约束格式错误?

时间:2012-03-03 17:22:39

标签: mysql sql foreign-keys foreign-key-relationship

当我尝试使用几个外键创建一个表时,我收到以下错误。如果我只包含userID外键,它会顺利进行,但当我尝试获取其他外键时也会抱怨。这是什么交易?

ERROR 1005: Can't create table 'ps5_lwilkins.PhoneNumber' (errno: 150)

SQL Statement:

CREATE  TABLE `ps5_lwilkins`.`PhoneNumber` (    
  `userID` CHAR(25) NOT NULL ,
  `resumeID` CHAR(30) NOT NULL ,
  `number` CHAR(45) NOT NULL ,
  PRIMARY KEY (`userID`, `resumeID`, `number`) ,
  INDEX `user_phoneNumber_fk1` (`userID` ASC) ,
  INDEX `resume_phoneNumber_fk3` (`resumeID` ASC) ,
  CONSTRAINT `user_phoneNumber_fk1`
    FOREIGN KEY (`userID` )
    REFERENCES `ps5_lwilkins`.`User` (`userID` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `resume_phoneNumber_fk3`
    FOREIGN KEY (`resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`resumeID` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB

以下是User的模式:

User(userid: CHAR(25), pass: VARCHAR(25)userid是PK

以下是Resume的架构:

Resume(userID: CHAR(25), resumeID: CHAR(30)

其他几个没有重要的属性)。 PK是(userID, resumeID)

有什么想法吗?需要更多信息?

看看与此类似的其他问题,我认为它在resumeID上有点格式错误的FK ......但是我看不到哪里!

我为FK约束btw尝试了几个不同的名字。

编辑:我没有权限执行SHOW ENGINE INNODB STATUS

1 个答案:

答案 0 :(得分:0)

您的评论如上所述。你需要改变这个:

  INDEX `user_phoneNumber_fk1` (`userID` ASC) ,
  INDEX `resume_phoneNumber_fk3` (`resumeID` ASC) ,

和此:

    FOREIGN KEY (`resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`resumeID` )

到此:

  INDEX `phoneNumber_fks` (`userID` ASC, `resumeID` ASC) ,

和此:

    FOREIGN KEY (`userID`, `resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`userID`, `resumeID` )