MySQL多表操作--外键约束多表关系

  • 外键约束介绍

    Mysql外键约束(foreign key)是表的一个特殊字段,常与主键约束一起使用。外键约束是一种用于维护两个表之间数据一致性的方法。它确保引用表中的每个值都存在于主表中的某个列中。外键约束通常用于实现数据库的参照完整性。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

  • 定义外键的规则

    1、主表必须已经存在于数据库中,或者是当前正在创建的表。

    2、必须为主表定义主键。

    3、主键不能包含空值,但允许在外键中出现空值。

    4、在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键。

    5、外键中列的数目必须和主表的主键中列的数目相同。

    6、外键中列的数据类型必须和主表主键列的数据类型相同。

  • 外键约束的创建步骤

    方式1:在创建表时设置外键约束

    mysql 复制代码
    [constraint <外键名>] foreign key (字段名 [,字段名2,...]) references <主表名>(主键列1 [,主键列2,...])

    方式2:通过 alter...add字段添加,前提是从表中外键列中的数据必须与主表中主键列的数据一致或是还没有数据

    mysql 复制代码
    alter table <表名> add constarint <外键名> foreign key(<列名>) references <主表名>(<列名>)

    eg1:一对多关系表中创建外键约束

    mysql 复制代码
    create database db; --创建数据库db
    use db;
    
    -- 创建部门表(主表)
    create table if not exists department(
    	deptno varchar(8) primary key comment '这是部门编号',
    	depname varchar(16) --这是部门编号
    )charset=utf8;
    
    -- 创建员工表(从表)
    create table if not exists staff(
    	sid varchar(16) primary key, --员工编号
    	sname varchar(16), --员工姓名
    	age int, --员工年龄
        dep_id varchar(8), --员工所属部门编号
        foreign key (dep_id) references department(deptno)
    )charset=utf8;

    eg2:多对对关系表中外键约束的创建通常会利用中间表将两个表进行关联。如学生表和课程表,一名学生可以选多门课程,一门课程也可以被多名学生选择

    mysql 复制代码
    -- 创建学生表(主表1)
    create table [if not exists] students(
    	sid int primary key auto_increment, -- 将学号设为自增主键
    	sname varchar(16),
    	age int,
    	gender enum('男','女') default '男'
    )charset=utf8;
    
    -- 创建课程表(主表2)
    create table course(
    	cid int primary key auto_increment, -- 将课程id设为自增主键
    	cname varchar(32)
    )charset=utf8;
    
    -- 创建中间表mid_stu_course
    create table mid_stu_course(
    	sid int,
    	cid int,
    	score double
    )charset=utf8;
    
    -- 分2次建立外键约束
    alter table mid_stu_course add foreign key(sid) references students(sid);
    alter table mid_stu_course add foreign key(cid) refernces course(cid);
    
    -- 插入数据时,中间表中的sid和cid需存在于主表中,即只能在主表的sid和cid的值中选择
  • 在外键约束条件下的数据操作

    1、数据插入:

    -- 必须先给主表添加主键列(外键约束列)的数据

    -- 给从表添加数据时,外键列的值必须依赖主表的主键列。即从表外键列插入的数据必须存在于主表主键列。

    2、删除数据:

    -- 从表的数据可以任意删除

    -- 主表的数据被从表依赖时不能被删除,未被依赖的数据才可以删除。

  • 删除外键约束

    mysql 复制代码
    alter table table_name drop foreign key <外键约束名>;
相关推荐
jiankeljx16 小时前
Spring Boot实现多数据源连接和切换
spring boot·后端·oracle
白菜!!!16 小时前
SQL中IF、IFNULL、NULLIF、ISNULL函数的使用
数据库·sql·mysql
H_老邪16 小时前
redis 安装
数据库·redis·缓存
m0_7432974216 小时前
Python在金融科技(FinTech)中的应用
jvm·数据库·python
霖霖总总16 小时前
[Redis小技巧17]深入解析 Redis 缓存穿透:原理、防御策略与布隆过滤器实践
数据库·redis·缓存
2401_8578652316 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
爱可生开源社区17 小时前
SCALE 二月榜单发布:新增三款国内外大模型,新增模型测评实验室!
数据库
m0_7166670717 小时前
趣味项目与综合实战
jvm·数据库·python
m0_6625779717 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
霖霖总总17 小时前
[Redis小技巧16]Redis 安全加固与加密传输指南:从基础到高级策略
数据库·redis