我试图将我的新模式转发到我的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
21条答案
按热度按时间8yoxcaq716#
对于mysql(innodb)。。。获取要链接的列的定义
比较并验证两个列定义是否正确
相同列类型(长度),相同列
像这样玩会很有帮助
lf5gs5x217#
我猜是的
Clients.Case_Number
和/或Staff.Emp_ID
与不完全相同的数据类型Clients_has_Staff.Clients_Case_Number
以及Clients_has_Staff.Staff_Emp_ID
.父表中的列可能是
INT UNSIGNED
?两个表中的数据类型必须完全相同。
pieyvz9o18#
可能出现外键约束错误的原因:
不是所有表都使用innodb作为引擎。
您正试图引用目标表上不存在的键。确保它是另一个表上的键(可以是主键或唯一键,也可以只是一个
key
)列的类型不同(例外是引用表上的列可以为null,即使它在引用表上不可以为null)。
如果pk/fk是varchar,请确保两者的排序规则相同。
更新:
其中一个原因可能是您使用的列
ON DELETE SET NULL
未定义为null。因此,请确保将该列设置为default null。看看这些。
rkttyhzu19#
检查表兼容性。例如,如果一个表
MyISAM
另一个是InnoDB
,您可能有此问题。hrysbysz20#
对我来说是列类型。比京特!=内景。
但后来还是没用。
所以我检查了引擎。确保table1=innodb和table=innodb
goucqfw621#
检查表的排序规则,使用
SHOW TABLE STATUS
您可以检查有关表的信息,包括排序规则。两个表必须具有相同的排序规则。
发生在我身上。