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 <外键约束名>;
相关推荐
张人玉4 分钟前
SQLSERVER数据备份
数据库·oracle·sqlserver
Ka1Yan10 分钟前
MySQL索引优化
开发语言·数据结构·数据库·mysql·算法
TDengine (老段)16 分钟前
TDengine 时间函数 TIMETRUNCATE 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Mors.1 小时前
dbeaver工具连接inceptor星环数据库
数据库
TG_yunshuguoji2 小时前
阿里云国际代理:阿里云的云数据库是什么?
服务器·数据库·安全·阿里云·云计算
程序猿 董班长3 小时前
springboot配置多数据源(mysql、hive)
hive·spring boot·mysql
huazhixuthink3 小时前
PostgreSQL三种关闭方式的区别
数据库·postgresql
阿里小阿希7 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
且行志悠8 小时前
Mysql的使用
mysql
白鹭8 小时前
MySQL源码部署(rhel7)
数据库·mysql