外键约束
建立好了关系字段(B表引用A表的主键)之后,为了保证关系字段数据的正确而添加的约束。
create table scores(
id int primary key auto_increment not null,
stuid int,
subid int,
score decimal(5,2), ! 一共5位数,小数部分占2位
foreign key(stuid) references students(id),
foreign key(subid) references subjects(id)
);
后面两句命令就是 引用外键并且有约束。
此时,如果插入的数据的stuid不存在于学生表的id中,会提示错误!
外键的级联操作
在上面的操作中,我们保证了添加数据的一致性,那么删除数据时呢?如果我们在学生表中删除了一名学生的信息,那么在成绩表中,也应当对应删除这名学生的成绩。
外键的级联操作,做的就是这件事情。
可以在创建表时指定级联操作,也可以在创建表后再修改外键的级联操作。
当然用逻辑删除的话,也可以进行相关的操作。
级联操作的类型有:
- restrict(限制):默认值,抛异常
- cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
- set null:将外键设置为空
- no action:什么都不做
这4种操作都不怎么样,所以我们一般做逻辑删除,多加一个isdelete字段来标注 是否被删除。