在我建立外键的时候发生了这样的错误,猜测可能是跟主键有关系
我的语句是这么写的:
constraint for_score_students foreign key(studentid) references students(
studentid)
错误提示在了红色s处
说明:
1 这句语句写在第三个表score里面,我想把score里的studentid作为score的外键
2 于是将问题定位于students表
出现这个错误的原因有两种:
1:students里的studentid不是主键(唯一关键字)
此时只需要对studentid加一个主键约束即可add primary key (studentid)
而我的问题出在创建students时用的是旧表复制而来的:create table students as select * from student
而复制旧表只能复制数据而不能复制约束,所以倒是students里的主键约束消失,出现了这样的错误。
2: studentid不是唯一主键,可能我的students里的主键设为了两个(联合主键)【 primary key (courseid,studentid)】
此时就需要设为联合外键作为主键,像这样 constraint foreign_name foreign key(
courseid,studentid) references
studentid(
courseid,studentid)
提一句,尽量避免联合主键联合外键,这样不符合第三范式,可能会造成数据冗余。