python学习------9.13----约束、表之间的关联关系

2021-06-30 17:07

阅读:541

mysql提供了 foreign key 专门用于为表和表之间 建立物理关联


思考 表里存储的是一条条的记录
     两个表之间能产生的关系有哪些?
        现有 A B两张表
        1.多对一
        2.一对一
        3.多对多

      在查找表之间的关系时  要分别站在 不同表去思考
        1. 从员工出发  员工对于部门来说 时 多个员工对应一个部门
        2. 从部门出发  一个部门对应多个员工
            如果两个得到的关系不同 则认为 这种多对一关系是单向


      先创建部门表
      create table dept(id int primary key auto_increment,name char(10),manager char(10));
      在创建员工表
      create table emp(id int primary key auto_increment,name char(10),dept_id int,foreign key(dept_id) references dept(id));


        需求: 设计  学员表 和 班级表  五分钟练习
              两个表多对一的关系  通过外键来进行关联
              外键加在谁身上?   加到从表上
              create table class(id int primary key auto_increment,name char(10));
              create table student(id int primary key auto_increment,name char(10),c_id int,foreign key(c_id) references class(id));

        总结: 外键的作用  表与表之间建立联系
        添加外键约束时: 产生的限制
                       被关联的表需要先被创建
                       部门数据(主表)应该先插入   员工数据(从表)后插入
                       在删除部门数据前(主表)前 要保证该部门的员工数据都删除了
                       在更新部门编号前  要先保证没有员工关联到这个部门

        简单的说 外键指的是 另一张的主键

        外键加上以后 主表中的数据 删除 和更新时 都受到限制
            解决的方案是为 外键 添加 级联操作

      

级联操作
指的是就是同步更新和删除
语法:在创建外键时 在后面添加 on update cascade 同步更新
on delete cascade 同步删除


实例:
create table class(id int primary key auto_increment,name char(10));


create table student(
id int primary key auto_increment,
name char(10),
c_id int,
foreign key(c_id) references class(id)
on update cascade
on delete cascade
);


insert into class value(null,"python3期");
insert into student value(null,"罗傲宇",1);


对主表的id进行更新
以及删除某条主表记录 来验证效果

 

上一篇:NumPy数组属性

下一篇:Neil_Python_2018/9/13


评论


亲,登录后才可以留言!