mysql _外键、实体关系与ER图

这里写图片描述

外键约束
    概念: A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, 一个表里可以有多个外键

    drop table if exists class;
    create table class(
        class_no int(2) unsigned zerofill primary key auto_increment comment '班级编号',
        class_name varchar(30) not null comment '班级名称'
    );
    insert into class values(1, '培优班');
    insert into class values(2, '普通班');

    drop table if exists student;
    create table student(
        stu_no int(2) unsigned zerofill primary key auto_increment comment '学员编号',
        stu_name varchar(30) not null comment '学员姓名',
        stu_sex varchar(3) not null comment '学员性别',
        stu_age tinyint(2) unsigned zerofill comment '学员年代',
        class_no int(2) unsigned zerofill comment '所在班级编号',
        foreign key(class_no) references class(class_no)  
    );
    insert into student values(01, '李白', '男', 18, 01);
    insert into student values(02, '杜甫', '男', 20, 01);
    insert into student values(03, '张飞', '男', 32, 02);
    insert into student values(04, '韩信', '男', 26, 02);
    insert into student values(05, '了龙', '男', 27, 02);
    insert into student values(06, '大乔', '女', 17, 01);
    insert into student values(07, '小乔', '女', 16, 01);
    insert into student values(08, '胖胖', '男', 18, 03);     --报错,class表里没有class_no为03的数据

    ps: 一个表(student)字段(class_no) 指向另一个表class的主键(class_no), 那么student表的class_no就是外键
        被指向的表称为主表(父表), 在这里也就是class表
        负责指向的表称为从表(子表), 在这里也是student表
    ps: 在创建的时候应该先创建主表,然后再创建从表, 插入数据时也应该先插入主表数据
    ps: 在删除表的时候应该先删除从表(子表), 然后再删除主表

    例:show create table student\G;    --可以通过查看表的创建信息来查看外键名
    例: alter table student drop foreign key student_ibfk_1;    --删除外键  student_ibfk_1(外键名)
    例: alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no);   --创建一个外键
    例: alter table student drop foreign key stu_fk_class;


    设置级联操作
    意思是在主表发生数据改变时,与之相关的从表应该要怎么处理
    可以使用关键词on update, on delete来标识
    允许的级联操作有:
        cascade: 如果主表更新或者删除数据时,那么从表也会执行相应的操作
        set null: 如果主表更新或者删除数据时, 那么从表相应的数据会设置成null
        restrict: 拒绝主表的操作(默认)

    (on update restrict   --拒绝主表的操作(默认))
    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update restrict;
**********************************************************************************************************************************

    (on update cascade   --如果主表更新或者删除数据时,那么从表也会执行相应的操作)
    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update cascade;
    update class set class_no = 3 where class_no = 1;
**********************************************************************************************************************************

    (on update set null   --如果主表更新或者删除数据时, 那么从表相应的数据会设置成null)
    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update set null;
    update class set class_no = 1 where class_no = 3;
**********************************************************************************************************************************

    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete restrict;
    delete from class where class_no = 1;
**********************************************************************************************************************************

    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete cascade;
    delete from class where class_no = 1;
**********************************************************************************************************************************

    alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete set null;
    delete from class where class_no = 2;
**********************************************************************************************************************************

实体关系模型
    实体模型它有三种成分: 实休,关系,属性
    什么实体: 比如一个学生,老师,一个教室等等这些就是实体,比如在student表里每一行数据表示的就是每一个实体的信息
    什么属性: 属性就是实体的属性,比如学生的年龄,性别
    什么关系: 关系则是实体之间的主从关系,比如一个学生与班级的关系

实体之间有三种关系
    一对一关系(1:1)
        如果实体集(表)A 中的每一个实休(就是每行记录),在实体集B中只有一条数据与它对应(联系);
        反之实体集B 中的每一个实体,在实体A中只有一条数据与它对应
        这样的实体关系主是一对一关系

    一对多关系(1:n)
        如果实体集A中每一个实体,在实体集B中有n个与之对应
        反之在实体集B中每一个实体,在实体集A中最多只有一个实体与之对应
        这样的实体就是一对多关系

    多对多关系(m:n)
        如果实体集A中每一个实体,在实体集B中有n个与之对应
        反之如果实体集B中每一个实体,在实体集A中也有n个与之对应
        这样的实体关系就是多对多关系

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值