1.外键 foreign key
如果一个实体A的某个字段,指向(引用)另一个实体B的主键,就称当前实体A的这个字段是外键
这里称class_id 为外键。class 表称为主表,或主实体,父表,或父实体。
student 表 称为子表或子实体,从表,或从实体。
2.两个问题:
1)在增加子表的记录时,是否有与之对应的父表记录?
2)在删除或者更新子表记录时,父表如何处理?
3.定义外键
在从表上,增加一个外键字段,指向主表的主键
Foreign Key (外键字段)references 主表名 (关联字段) [主表记录删除时的动作] [主表记录更新时的动作]
创建父表:
create table class(
class_id int primary key auto_increment,
class_name varchar(10) not null default 'class_one' comment '班级名称'
) ;
创建子表:
create table student(
t_id int primary key auto_increment,
t_name varchar(10) not null default ''
) ;
在定义的时候定义foreign key
即创建子表应该这样定义:
create table student(
t_id int primary key auto_increment,
t_name varchar(10) not null default '',
class_id int,
foreign key (class_id) references class (class_id)
) ;
4.设置级联操作
1)主表更新 on update
2)主表更新 on delete
允许的级联操作
1)cascade 当主表被更新或删除时,从表也会执行相应的动作
2)set null 表示从表不指向从表的任何记录,主表删除或更新时,从表的foreign key 设置为null
3)restrict 拒绝主表的对应操作
5.修改外键
1)先删除外键,在新建外键
删除外键时,必须指定外键名称(非创建时的列名称),可以通过show create table table_name 查看外键名称
alter table table_name drop foreign key key_name;
alter table student drop foreign key student_ibfk_1;
2) 新建foreign key
alter table table_name add foreign key (列名) references 父表 (父表字段)on delete set null;
alter table student add foreign key (class_id) references class (class_id) on delete set null;
alter table student drop foreign key student_ibfk_1;
alter table student add foreign key (class_id) references class (class_id) on delete cascade;