Cannot add or update a child row: a foreign key constraint fails

cannot add or update a child row: a foreign key constraint fails
无法添加子行或更新子行:外键约束失败
更新cd_spec表里的数据,报错如下:

Cannot add or update a child row: a foreign key constraint fails (`cd_spec`, CONSTRAINT `F_Reference` FOREIGN KEY (`type_id`) REFERENCES `cd_type` (`type_id`))

根据报错信息检查发现cd_spec表中type_id的值范围大于外键参照表cd_type中的type_id的取值范围;
出现这种报错一般都是由于表与外键取值范围参照表的相关值不匹配。

解决方法:外键取值范围参照的表cd_type补齐更新相关内容
例如可以查询哪些不匹配,更新外键约束参照表:select * from cd_spec where type_id not in(select type_id from cd_type )

mysql禁用外键约束: SET FOREIGN_KEY_CHECKS=0;
mysql启动外键约束: SET FOREIGN_KEY_CHECKS=1;
查看当前FOREIGN_KEY_CHECKS值:SELECT @@FOREIGN_KEY_CHECKS;
mysql删除外键约束:alter table table_name drop foreign key foreign_key_name;

CONSTRAINT 与 REFERENCES 外键约束总结:
假如有两张表:学生信息表(学号,姓名,性别,年龄) 学号是主键和成绩表(学号,课程,分数)

create table students(id int not null primary key,name char(10),sex char(1),age int);
create table results(id int not null,course char(20),grade int);

CONSTRAINT 是对表中某列定义约束,例如students表中年龄限定16到23之间;students表中的sex限定男,女;

alter table students add constraint CK_student_age check(age between 16 and 23);
alter table students add constraint CK_student_sex check(sex in ('男','女'));

REFERENCES 外键取值参照 ,例如成绩表中学号定义外键(FOREIGN KEY),该外键的取值范围参照(REFERENCES) 学生信息表的学号

alter table results add constraint FK_student foreign key(id) references students(id);

你可能感兴趣的:(mysql)