实体外键约束、级联操作
【实体关系】
1.一对多:在多的表,增加一个字段,用于只想该实体所悟的另外的实体的标识。
2.多对多:利用一个中间表,表示实体之间的对应关系。(中间表和实体表是一对多关系)
【外键约束】foreign key (class_id) references tb_class (class_id); 【auto_increment 1:最低只能从1开始自动增长,而不是从0开始增长】
drop table if exists tb_class; create table tb_class( class_id int primary key auto_increment, class_name varchar(10) not null default 'mysql' comment '班级姓名' ) character set utf8; drop table if exists tb_student; create table tb_student( stu_id int primary key auto_increment, stu_name varchar(10) not null default '', class_id int, foreign key (class_id) references tb_class (class_id) on delete set null ) character set utf8; insert into tb_class values (null,'MySQL001'); insert into tb_student values (null,'张',1);
【修改外键】先删除,在新建。通过修改表完成
alter table tb_name drop foreign key 外键名称;
alter table tb_student drop foreign key tb_student_ibfk_1;
alter table tb_name add foreign key 外键定义;
alter table tb_student add foreign key (class_id) references tb_class (class_id) on delete set null;
【级联操作】
当主表数据发生改变时,与之关联的从表数据应该如何处理:
主表更新:on update
主表删除:on delete
【允许的级联动作】on delete set null on update cascade
cascade:关联操作,如果主表被更新或删除,那么从表也会执行相应的操作。
set null:设置为null,表示从表不指向任何主表记录。
restrict:拒绝主表的相关操作。
alter table tb_student add foreign key (class_id) references tb_class (class_id) on update cascade on delete restrict;