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 <外键约束名>;
相关推荐
兮兮能吃能睡2 小时前
SQL中常见的英文术语及其含义
数据库·sql·oracle
Elastic 中国社区官方博客3 小时前
根据用户行为数据中的判断列表在 Elasticsearch 中训练 LTR 模型
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
王道长服务器 | 亚马逊云4 小时前
AWS CloudWatch:服务器的“眼睛”,实时监控一切动向
服务器·数据库·aws
怪兽20147 小时前
什么是 Redis?
java·数据库·redis·缓存·面试
wangmengxxw8 小时前
Redis概述
数据库·redis·缓存
笔生花8 小时前
【实战-12】flink版本表
数据库·sql·flink
花月C8 小时前
高效查找数据的数据结构—MySQL 索引
数据结构·数据库·mysql
我笔记8 小时前
关系型数据库RDBMS与非关系型数据库NoSQL区别
数据库·oracle
PiscesCanon9 小时前
达梦开启awr功能报错:[-7160]:Object [DBMS_WORKLOAD_REPOSITORY_DATA_LOW] is invalid
数据库·mysql
SZ1701102319 小时前
新机器 银河麒麟 安装 达梦数据库
数据库