相关推荐recommended
【MySQL】学习外键约束处理员工数据
作者:mmseoamin日期:2024-04-01

【MySQL】学习外键约束处理员工数据,](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center),第1张

🌈个人主页: Aileen_0v0

🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法

💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

  • `外键约束`
    • `含义`
    • `分析`
    • `添加外键的语法`
      • `创建表的时候直接添加外键`
      • `创建完表以后额外添加`
      • `删除外键`

        外键约束

        含义

        外键:用来让两张表的数据之间建立连接,从而保证数据的完整性和一致性。

        员工表emp(子表)
        idnameagejobsalaryentrydatemanageriddept_id
        1金庸66总裁200002000-01-01null5
        2张无忌20项目经理125002005-12-0511
        3杨逍33开发84002000-11-0321
        4韦一笑48开发110002002-02-0521
        5常遇春43开发105002004-09-0731
        部门表dept(父表)
        idname
        1研发部
        2 市场部
        3 财务部
        4销售部
        5总经办

        ⚠️注意:上面两张表,在数据库层面,并未建立外键关联,所以无法保证数据的一致性和完整性。


        1.准备好部门表

        -- -------------------约束(外键)-------------
        -- 准备数据
        create table dept(
            id int auto_increment comment 'ID' primary key ,
            name varchar(50) not null comment '部门名称'
        )comment '部门表';
        insert into  dept(id, name) VALUES (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');
        

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第2张


        create table emp(
            id int auto_increment comment 'ID' primary key ,
            name varchar(50) not null comment '姓名',
            age int comment '年龄',
            job varchar(20) comment '职位',
            salary int comment '薪资',
            entrydate date comment '入职时间',
            managerid int comment '直属领导ID',
            dept_id int comment '部门ID'
        )comment '员工表';
        insert into emp (id, name, age, job, salary, entrydate, managerid, dept_id) VALUES
                        (1,'金庸',66,'总裁',2000,'2000-01-01',null,5),(2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
                        (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
                        (5,'常遇春',43,'开发',10500,'2004-09-07',3,1),(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);
        

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第3张


        分析

        通过这两张表我们可以看出,他们之间存在逻辑关系。但是并未设置物理外键,这就无法保证数据的一致性和完整性。

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第4张

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第5张

        如果我们把1号部门删了,但是员工表的数据海关连着1号表,这就会导致数据出现不完整性。

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第6张


        添加外键的语法

        创建表的时候直接添加外键

        create table 表名(
            字段名 数据类型,
            ...
            [constraint] [外键名称] foreign key(外键字段名) references 主表(主表列表)
        );
        

        创建完表以后额外添加

        alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
        

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第7张

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第8张

        再一次删除研发部

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第9张

        ⚠️报错显示:我们不能直接删除父表中id为1的记录,而子表中还有非常多的记录关联着父表中id为1的记录。

        删除外键

        -- 删除外键
        alter table 表名 drop foreign key 外键名称;
        
        -- 删除外键
        alter table emp drop foreign key fk_emp_dept_id;
        

        【MySQL】学习外键约束处理员工数据,在这里插入图片描述,第10张

        删除完外键我们可以发现emp表的蓝色钥匙没有了。

        【MySQL】学习外键约束处理员工数据,](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center),第11张

        【MySQL】学习外键约束处理员工数据,](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center),第12张