Mysql中定义外键约束出现的问题

      这段时间在学习Mysql,昨天在建立一个表的外键约束时出现了一个问题,自己还检查了好久才发现错误(因为是菜鸟啦! Mysql中定义外键约束出现的问题),所以今天就想把这个错误记录下来!

    下面是我建立表的SQL语句:
create table course
(
Cno char(2) not null,
Cname varchar(20),
Cpno char(2),
Credit smallint,
primary key (Cno),
foreign key (Cpno) references Student(Sno)
)ENGINE = InnoDB;

create table sc
(
Sno char(7) not null,
Cno char(2) not null,
grade smallint null check (grade is null or (grade between 0and 100)),
primary key (Sno, Cno),
foreign key (Sno) referencesStudent(Sno),
foreign key (Cno) referencescourse(Cno) 
)ENGINE = InnoDB; 

表建立完后,我对course表进行了插入语句:insert into course values ('1', '数据库','2', '12');
结果报错为: ERROR 1452 (23000): Cannot add orupdate a child row: a foreign key constraint fails(`student`.`course`, CONSTRAINT `course_ibfk_1` FOREIGN KEY(`Cpno`) REFERENCES `course` (`Cno`))
意思就是不能进行添加和更新在一个孩子行。
   
      注意:因为course表有一个外键约束,外键为Cpno,参照Cno。所以的那个要插入一行时就必须满足Cno已经存在,Cpno才有东西参照,(我的插入SQL语句中‘1’就不存在,所以不能参照,就会报错)。对于sc表,同样的道理,如果要在该表中进行插入或者更新操作,就必须满足Student(Sno)和course(Cno)表都存在相应的数据。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值