MySQL外键约束

外键约束:foreign key 简称: FK

外键在同一张表中可以有多个外键存在,而主键PK只能有一个

举个例子来说明外键约束,创建学生表和班级表,通过学生的编号来查询他所在的班级。

drop table if exists t_student;
create table t_student(
    sno int(4) primary key auto_increment,
    sname varchar(32),
    classno int(4),
    constraint t_student_classno_fk foreign key(classno) references t_class(cno)
);

drop table if exists t_class;
create table class(
    cno int(4) primary key,
    cname varchar(32)
);

insert into t_class(cno,cname) values(100,'高三1班');
insert into t_class(cno,cname) values(200,'高三2班');
insert into t_class(cno,cname) values(300,'高三3班');

insert into t_student(sname,classno) values('张三',100);
insert into t_student(sname,classno) values('李四',100);
insert into t_student(sname,classno) values('王五',400);

给学生字段添加了外键约束以后,约束了classno字段让它引用父表中的字段cno,这样400就添加不进去就会报错,保证了一个学生肯定有一个班级与之对应.

添加外键约束应注意一下三点:

  1. 外键字段可以为NULL,外键为空的数据也叫孤儿数据;

  2. 被引用字段必须具有unique约束;(其实就是主键)

  3. 创建表时先创建父表,再创建子表,插入数据时,先插入父表数据,再插入子表数据;

select 

        s.sname,c.cname

from

       t_student s

join

       t_class c

on

        s.classno=c.cno;用这个sql语句去查询学生所对应的班级。

  • 级联更新与级联删除:

  • 用法:在添加级联更新与级联删除的时候,需要在外键约束后面添加关键字;

  • 注意:级联更新与级联删除操作谨慎使用,因为级联操作会将数据改变或者删除【数据无价】

级联删除定义:在删除父表数据的时候,级联删除子表中数据.(on delete cascade)

添加级联删除:引用上面的例子,先删除外键约束再添加.

alter table t_student drop foreign key t_student_classno_fk;

alter table t_student add constraint t_student_classno_fk foreign key(classno) references t_class(cno) on delete cascade; 

添加级联更新: 与级联删除类似,同样是把外键约束删除掉再添加.

 alter table t_student drop foreign key t_student_classno_fk;

alter table t_student add constraint t_student_classno_fk foreign key(classno) references t_class(cno) on update cascade; 就是delete关键字换成了update,仅此而已.

 

 

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值