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

MySQL 多表关系(多表查询 一)

多表关系描述

MySQL是一种关系型数据库管理系统,它支持多表关系,这在数据库设计和查询中非常重要。

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对一
  • 一对多(多对一)
  • 多对多

一对一(1-1)

关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另
一张表中,以提升操作效率
实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

案例:用户(表) 与 用户详情(表)的关系。

每个用户只能对应一个详情信息,每个详情情信息只能对应一个用户( user_detail表 外键 指向 user表 主键)

-- 创建用户表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),-- 其他用户表字段...
);-- 创建用户详情表
CREATE TABLE user_details (id INT PRIMARY KEY,user_id INT UNIQUE,card_number VARCHAR(20),-- 其他用户详情表字段...
);-- 添加一对一关系的外键约束
alter table user_details 
add constraint fk_user_id
foreign key (user_id) references users(id);

一对多(1-N或N-1)

关系:一个表中的记录可以关联到另一个表中的多个记录

实现: 在多的一方建立外键,指向一的一方的主键

案例:部门表和员工表的关系。

一个部门可以有多个员工,而一个员工只能属于一个部门(emp表 外键 指向 dept表 主键)

-- 创建部门表
CREATE TABLE departments (id INT PRIMARY KEY,name VARCHAR(50),-- 其他部门表字段...
);-- 创建员工表
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),department_id INT,-- 其他员工表字段...
);-- 添加一对多关系的外键约束
alter table employees
add constraint fk_department_id
foreign key (department_id) references departments(id);

多对多(N-N)

关系:一个表的记录可以关联到另一个表的多个记录,反之亦然

实现:在MySQL中,无法直接实现多对多关系,需要通过中间表来实现。建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

案例:学生表和课程表的关系。

一个学生可以选择多门课程,而一门课程也可以被多个学生选择。为了建立多对多关系,可以创建一个名为"选课"(student_course)的中间表,它包含学生ID和课程ID两个字段,用于记录学生和课程的关联关系。

-- 创建中间表、建立多对多关系(两个外键)
create table student_course(id int auto_increment comment '主键' primary key,studentid int not null comment '学生ID',courseid int not null comment '课程ID',constraint fk_course_id foreign key (course_id) references course (id),constraint fk_student_id foreign key (student_id) references student (id)
)comment '选课表';

上一篇:MySQL - 外键(foreign key)约束的作用和使用

下一篇:MySQL 连接查询(多表查询 二)

http://www.lryc.cn/news/176717.html

相关文章:

  • 【面试高高手】——JavaIO篇(23题)
  • 图像采集 deep OCR
  • Linux 终端命令总结
  • 中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表
  • 速看!软考中项100条重要知识点集锦!
  • Pycharm在进行debug时出现collecting data如何解决?
  • 【算法分析与设计】算法概述
  • 如何进一步全面提高项目估算精准度?
  • Git学习笔记4
  • 【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)
  • 成都睿趣科技:抖音开通橱窗带货需要钱吗
  • 中间件 - 分布式协调服务Zookeeper
  • golang的实用工具
  • 图层混合模式(三)
  • 蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP
  • 【计算机网络】DNS原理介绍
  • Docker的基础命令
  • 提取项目依赖包的licenses
  • Vue项目自动转换px为rem-高保真还原设计图
  • rman备份到远程服务器
  • 数据结构与算法
  • 【Web3】DAO相关的基础知识
  • 一文教你学会ArcGIS Pro地图设计与制图系列全流程(3)
  • 用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)
  • 复杂SQL解析
  • js中哪些地方会用到window?
  • KITTI raw_data数据集百度云下载
  • (3) OpenCV图像处理kNN近邻算法
  • 手撸RPC【gw-rpc】
  • 【Linux】:Kafka组件介绍