因为想学外键使用时找了好多博客都看不懂,各种地方没注解,看了视频才学懂,现在把视频内容总结成一个简单教程,帮助后人!
概念:
设表A主键为aid,现有表B,在表B中设置一个属性,把这个属性定义为外键(关联表A,就是关联到A的主键),那么表B就称为子表,表A是主表(谁用外键谁是子表)。
外键的本质就是当主表和子表进行关联,当主表发生改变时子表自动有相应的变化,最常用的还是通过外键做查询
使用条件:
1、innodb引擎(mysql 5版本之前需手动设置,5版本以上为默认引擎)
2、在表B中设置的即将被定义为外键的属性必须和表A主键类型一致(或能互相转换)
使用方式:(前提都是要关联的主表表A已经存在!)
1、在创建表时使用
create table t_b(
b_waijian int ,
constraint b_a //当有多个外键时,起个名字,可以这样理解!
foreign key(b_waijian) references t_a(id)
on delete cascade(这在设置当delete表A的id时,表B会发生什么,后面还有解释)
on update cascade(这在设置当update表A的id时,表B会发生什么)
)
2、在表已创建后使用
alter table t_b add
constraint b_a //当有多个外键时,起个名字,可以这样理解!
foreign key(b_waijian) references t_a(id)
on delete cascade(这在设置当delete表A的id时,表B会发生什么,后面还有解释)
on update cascade(这在设置当update表A的id时,表B会发生什么)
解释on dalete xxx
xxx有三种:1. cascade(当表A的id被删除,表B的那行关联的记录直接也删除!)
2、set null (当表A的id被删除,表B的那行关联的记录的外键属性设为NULL!)
3、no action (当表A的id被删除,表B的那行关联的记录不发生任何改变!也就是只要表B有记录关联表A的主键,那么就不能删除这个主键)
on update同理 !因为外键一般都关联主表主键,而主键不会经常修改,所以on update 用的频率很少!
3、删除外键
alter table t_b drop foreign key b_waijian