外键的只要作用在于子表在插入数据的时候,要首先考虑到父表中是否有这个数据:
外键的删除;
--foreign key (本表的外键的列名 master) references 父表teacher(父表的主键)
是先有父表,再有子表;此时父表中必须有数据才行,不然字表中也插入不进去数据
--外键约束
--foreign key(本表的外键的列名 master) references 父表teacher(父表的主键)
drop table if exists classes;
create table if not exists classes (
id int auto_increment,
name varchar(20),
classroom char(3) default '308',
master int, -- 班主任
primary key(id),
foreign key (master) references teacher(id)
);
alter table classes
add begindate date after classroom;
insert into classes (
name,
begindate,
master
) values (
'h51128',
now(),
1
)
-- 添加外键
alter table classes
add foreign key(master) references teacher(id);
-- 尝试再添加班级数据, 测试外键的有效性.
-- 丢弃外键
alter table classes
drop foreign key classes_ibfk_1;
alter table classes
add constraint myfk foreign key(master) references teacher(id);
外键约束时, 默认情况下父表中的被引用的记录不可以删除
在添加外键时,可以指定父表中被引用的记录的处理选项
alter table classes
add constraint myfk2 foreign key(master) references teacher(id) on delete [do nothing(默认选项)][cascade(级联), set null(设置为null)];
-- 当删除或者修改父表中的被引用的记录时, 子表中相应的记录也被级联删除
alter table classes
add constraint myfk2 foreign key(master) references teacher(id) on delete cascade on update cascade;
-- 当删除或者修改父表中的被引用的记录时, 子表中相应的记录的外键列的值被置为null
alter table classes
add constraint myfk3 foreign key(master) references teacher(id) on delete set null on update set null;
添加外键, 实现级联删除.