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

m2xkgtsf  于 2021-06-18  发布在  Mysql
关注(0)|答案(21)|浏览(668)

我试图将我的新模式转发到我的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 = InnoDB

CREATE  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
8yoxcaq7

8yoxcaq716#

对于mysql(innodb)。。。获取要链接的列的定义

SELECT * FROM information_schema.columns WHERE 
TABLE_NAME IN (tb_name','referenced_table_name') AND 
COLUMN_NAME  IN ('col_name','referenced_col_name')\G

比较并验证两个列定义是否正确
相同列类型(长度),相同列
像这样玩会很有帮助

set foreign_key_checks=0;
ALTER TABLE tb_name ADD FOREIGN KEY(col_name) REFERENCES ref_table(ref_column) ON DELETE ...
set foreign_key_checks=1;
lf5gs5x2

lf5gs5x217#

我猜是的 Clients.Case_Number 和/或 Staff.Emp_ID 与不完全相同的数据类型 Clients_has_Staff.Clients_Case_Number 以及 Clients_has_Staff.Staff_Emp_ID .
父表中的列可能是 INT UNSIGNED ?
两个表中的数据类型必须完全相同。

pieyvz9o

pieyvz9o18#

可能出现外键约束错误的原因:
不是所有表都使用innodb作为引擎。
您正试图引用目标表上不存在的键。确保它是另一个表上的键(可以是主键或唯一键,也可以只是一个 key )
列的类型不同(例外是引用表上的列可以为null,即使它在引用表上不可以为null)。
如果pk/fk是varchar,请确保两者的排序规则相同。
更新:
其中一个原因可能是您使用的列 ON DELETE SET NULL 未定义为null。因此,请确保将该列设置为default null。
看看这些。

rkttyhzu

rkttyhzu19#

检查表兼容性。例如,如果一个表 MyISAM 另一个是 InnoDB ,您可能有此问题。

hrysbysz

hrysbysz20#

对我来说是列类型。比京特!=内景。
但后来还是没用。
所以我检查了引擎。确保table1=innodb和table=innodb

goucqfw6

goucqfw621#

检查表的排序规则,使用 SHOW TABLE STATUS 您可以检查有关表的信息,包括排序规则。
两个表必须具有相同的排序规则。
发生在我身上。

相关问题