父表:
学生表:
create table stu(
snumber varchar(10) primary key,
sname varchar(10));
子表:
成绩表:
create table score (
id int auto_increment primary key ,
snumber varchar(10),
course_name varchar(10),
constraint score_fk foreign key(snumber) references stu(snumber));
(注:外键关联的父表中的字段只要是具有唯一性即可,不一定要是主键,如可以是unique索引)
切记:父表中被关联的字段必须具有唯一性约束,要不然连表都无法建成功,经常出现的错误如下:
ERROR 1005 (HY000): Can't create table 'basetest.book' (errno: 150)此时还没有设置级联删除和更新生效,
由于外键约束的存在
所以父表不能先于子表删除或者更新数据,(会报错)
即必须先更新子表或者删除子表中的数据才能对父表进行删除或者更新操作(主要针对两表之间关联的字段)
现在把原有外键约束删除:
alter table score drop foreign key score_fk;
重新添加外键约束:
alter table score add constraint score_fk foreign key(snumber) references stu(snumber)
on delete cascade on update cascade;
这里设置了外键级联删除和更新