为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

精慕HU 2019-06-18 16:56:02
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 = InnoDBSQL脚本执行完成:语句: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
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

我猜Clients.Case_Number和/或Staff.Emp_ID的数据类型与Clients_has_Staff.Clients_Case_NumberClients_has_Staff.Staff_Emp_ID.

也许父表中的列是INT UNSIGNED?

它们在两个表中都需要完全相同的数据类型。


查看完整回答
反对 回复 2019-06-18
?
www说

TA贡献1775条经验 获得超8个赞

您可能会得到外键约束错误的原因:

  1. 您并不是将InnoDB用作所有表上的引擎。
  2. 您正在尝试引用目标表上不存在的键。确保它是

    钥匙

    在另一个表上(它可以是主键或唯一键)
  3. 列的类型不一样(例外是引用表上的列可以为空)。
  4. 如果PK/FK是一个varchar,那么确保排序规则对两者都是相同的。

最新情况:

  1. 其中一个原因也可能是您所使用的列。

    ON DELETE SET NULL

    未定义为NULL。因此,请确保该列设置为默认NULL。

看看这些。


查看完整回答
反对 回复 2019-06-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

对于其他错误,相同的错误可能并不总是由于列类型错配造成的,您可以通过发出命令来查找有关mysql foriegn键错误的更多信息。

SHOW ENGINE INNODB STATUS;

您可能在打印的邮件顶部附近发现一个错误,类似于

无法在引用的表中找到索引,其中引用的列显示为第一列,或表中的列类型和引用的表不匹配约束。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 1229 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信