MySQL错误1215:无法添加外键约束

MySQL错误1215:无法添加外键约束

我正试图将我的新模式转发到我的db服务器上,但我不知道为什么会出现这个错误。我试图在这里搜索答案,但我发现的所有内容都说,要么将db引擎设置为Innodb,要么确保我试图用作外键的键是它们自己表中的主键。如果我没有弄错的话,这两件事我都做过了。你们还能提供什么帮助吗?

Executing SQL script in server

ERROR: Error 1215: Cannot add foreign key constraint-- ------------------------------------------------------- 
Table `Alternative_Pathways`.`Clients_has_Staff`-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
  `Clients_Case_Number` INT NOT NULL ,
  `Staff_Emp_ID` INT NOT NULL ,
  PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
  INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
  INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
  CONSTRAINT `fk_Clients_has_Staff_Clients`
    FOREIGN KEY (`Clients_Case_Number` )
    REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
    ON DELETE NO ACTION    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Clients_has_Staff_Staff1`
    FOREIGN KEY (`Staff_Emp_ID` )
    REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
    ON DELETE NO ACTION    ON UPDATE NO ACTION)ENGINE = InnoDB

SQL脚本执行完成:语句:7成功,1失败

下面是父表的SQL。

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
  `Case_Number` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  `Address` CHAR(50) NULL ,
  `Phone_Number` INT(10) NULL ,
  PRIMARY KEY (`Case_Number`) )ENGINE = InnoDBCREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
  `Emp_ID` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  PRIMARY KEY (`Emp_ID`) )ENGINE = InnoDB


精慕HU
浏览 1230回答 3
3回答

慕雪6442864

我猜Clients.Case_Number和/或Staff.Emp_ID的数据类型与Clients_has_Staff.Clients_Case_Number和Clients_has_Staff.Staff_Emp_ID.也许父表中的列是INT UNSIGNED?它们在两个表中都需要完全相同的数据类型。

www说

您可能会得到外键约束错误的原因:您并不是将InnoDB用作所有表上的引擎。您正在尝试引用目标表上不存在的键。确保它是钥匙在另一个表上(它可以是主键或唯一键)列的类型不一样(例外是引用表上的列可以为空)。如果PK/FK是一个varchar,那么确保排序规则对两者都是相同的。最新情况:其中一个原因也可能是您所使用的列。ON DELETE SET NULL未定义为NULL。因此,请确保该列设置为默认NULL。看看这些。

人到中年有点甜

对于其他错误,相同的错误可能并不总是由于列类型错配造成的,您可以通过发出命令来查找有关mysql foriegn键错误的更多信息。SHOW ENGINE INNODB STATUS;您可能在打印的邮件顶部附近发现一个错误,类似于无法在引用的表中找到索引,其中引用的列显示为第一列,或表中的列类型和引用的表不匹配约束。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL