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 <外键约束名>;
相关推荐
小诸葛的博客1 小时前
Go 语言中的select是做什么的
数据库·sql·golang
独泪了无痕2 小时前
数据库开发必备:理解DDL、DML、DQL和DCL
数据库·后端
Gauss松鼠会2 小时前
GaussDB Plan Hint调优实战:从执行计划控制到性能优化
数据库·sql·性能优化·database·gaussdb
zeijiershuai3 小时前
MySQL-SQL-DQL语句、DQL基本查询、DQL条件查询、DQL分组查询、聚合函数、DQL排序查询、DQL分页查询
数据库·sql·mysql
woshilys4 小时前
oracle 存储体系结构
oracle
橙子家4 小时前
Redis 集群实现分布式缓存的示例操作流程【Redis 系列之五】
数据库
Jodie_Rao4 小时前
在 M1 芯片的 Mac 电脑上安装 Redis 可以通过 Homebrew 快速完成
数据库·redis·macos
weixin_409411024 小时前
面向数据库场景的大模型交互微调数据集
数据库·oracle·交互
东宇科技5 小时前
mysql中my.cnf权限不能过大。否则无法生效
数据库·mysql
喵喵帕斯5 小时前
MySQL索引优化-show index
后端·sql·mysql