当前位置: 首页 > news >正文

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

  • 外键约束介绍

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

  • 定义外键的规则

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

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

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

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

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

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

  • 外键约束的创建步骤

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

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

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

    alter table <表名> add constarint <外键名> foreign key(<列名>) references <主表名>(<列名>)
    

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

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

    -- 创建学生表(主表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、删除数据:

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

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

  • 删除外键约束

    alter table table_name drop foreign key <外键约束名>;
    
http://www.lryc.cn/news/459635.html

相关文章:

  • 【python入门到精通专题】8.装饰器
  • Halcon Blob分析提取小光斑
  • Lua
  • 模型 总观效应
  • 【HarmonyOS NEXT】实现页面水印功能
  • selenium自动化测试之Junit
  • 【氮化镓】基于氮化镓的互补逻辑集成电路[Nature Electronics]
  • Linux之如何找回 root 密码?
  • 后端参数校验方式
  • 访问控制列表(课内实验)
  • 处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优
  • 数据分析库Pandas
  • nginx做负载均衡的策略有哪些和模块
  • 基于SSM社区医院预约转诊管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • Android适配器更改,ListView未收到通知解析
  • ubuntu18.04系统中图形化界面
  • 深入Semantic Kernel:插件开发与实践应用(进阶篇)
  • 基于SpringBoot+Vue+Uniapp的植物园管理小程序系统(2024最新,源码+文档+远程部署+讲解视频等)
  • 2024zzuacm新生选拔赛第一场
  • IP地址如何支持远程办公?
  • spring 集合注入格式
  • 基于Zabbix进行服务器运行情况监测
  • Github优质项目推荐 - 第五期
  • Java_ EE (网络编程)
  • Qt子线程运行报错error: undefined reference to `excelThread::conversionFinished()‘
  • VSCode 使用 EmmyLua 对lua进行调试
  • neovim ubuntu中WARNING No clipboard tool found
  • 1882B - Sets and Union
  • thinkphp阿里云发送短信验证码,存储到缓存中完成手机号验证
  • 题目解析:1423. 可获得的最大点数