新闻中心
mysql如何实现多对多关系建模
在MySQL中实现多对多关系需通过中间表拆解为两个一对多关系,如学生与课程间建立student_course表,包含双外键并设联合主键,可扩展选课时间等字段,借助JOIN查询关联数据,通过INSERT和DELETE操作维护关系,配合外键约束确保数据完整性。

在MySQL中实现多对多关系,需要通过中间表(也叫关联表或连接表)来完成。因为数据库表之间不能直接表达“多对多”关系,必须将其拆解为两个“一对多”关系。
1. 多对多关系的基本结构
假设有两个实体:学生(Student)和课程(Course)。一个学生可以选修多门课程,一门课程也可以被多个学生选修,这就是典型的多对多关系。
建模时需创建三张表:
- student:存储学生信息
- course:存储课程信息
- student_course:中间表,记录学生和课程的关联
示例SQL:
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL ); <p>CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL );</p><p>CREATE TABLE student_course ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES student(id) ON DELETE CASCADE, FOREIGN KEY (course_id) REFERENCES course(id) ON DELETE CASCADE );</p>
2. 中间表的设计要点
中间表的核心作用是维护两个表之间的关联关系。设计时注意以下几点:
- 包含两个外键字段,分别指向两个主表的主键
- 通常将这两个外键组合成联合主键,防止重复记录
- 可添加额外字段,如选课时间、成绩等
- 设置合适的外键约束,确保数据完整性
扩展示例:
-- 带附加信息的中间表 CREATE TABLE student_course ( student_id INT, course_id INT, enroll_time DATETIME DEFAULT CURRENT_TIMESTAMP, grade DECIMAL(3,1), PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES student(id) ON DELETE CASCADE, FOREIGN KEY (course_id) REFERENCES course(id) ON DELETE CASCADE );
3. 查询多对多数据
通过JOIN操作可以从中间表获取关联数据。
dmSOBC SHOP网店系统
dmSOBC SHOP网店系统由北京时代胜腾信息技术有限公司(http://www.webzhan.com)历时6个月开发完成,本着简单实用的理念,商城在功能上摒弃了外在装饰的一些辅助功能,尽可能的精简各项模块开发,做到有用的才开发,网店V1.0.0版本开发完成后得到了很多用户的使用并获得了好评,公司立即对网店进行升级,其中包括修正客户提出的一些意见和建议,现对广大用户提供免费试用版本,如您在使用
0
查看详情
例如:查询某个学生选修的所有课程
SELECT c.title FROM course c JOIN student_course sc ON c.id = sc.course_id WHERE sc.student_id = 1;
反过来,查询某门课程的所有学生:
SELECT s.name FROM student s JOIN student_course sc ON s.id = sc.student_id WHERE sc.course_id = 101;
4. 插入与删除操作
插入关系:先确保主表数据存在,再向中间表插入记录
-- 学生1选修课程101 INSERT INTO student_course (student_id, course_id) VALUES (1, 101);
删除关系:从中间表删除对应记录即可
-- 取消学生1对课程101的选修 DELETE FROM student_course WHERE student_id = 1 AND course_id = 101;
使用ON DELETE CASCADE后,当某个学生被删除时,其所有选课记录也会自动清除。
基本上就这些。中间表是处理多对多关系的标准做法,结构清晰且易于维护。
以上就是mysql如何实现多对多关系建模的详细内容,更多请关注其它相关文章!
# 多对多关系
# cad
# mysql
# 也会
# 亚马逊关键词排名最新版
# 佳缘网站建设管理
# 孝感跨境电商网站建设
# 虎门租房网站建设大学
# 大连正规的网站建设
# 河源视频营销推广
# 将其
# 操作步骤
# 全攻略
# 主键
# 如何实现
# 多个
# 镜像
# 离线
# 网店
# 漂流营销推广方案设计
# 谷歌网站优化有什么要求
# 嘉善seo推广报价公司
# 微网站免费建设平台
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
理解J*aScript Promise的微任务队列与执行顺序
Golang如何使用const iota_Go iota常量计数器讲解
马斯克:Optimus 人形机器人复数形式为 Optimi
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率
抖音从哪里进入网页版_抖音官方入口链接
解决Bootstrap卡片顶部边距导致背景图下移的问题
12306选座怎么选到商务座_12306商务座选择与配置说明
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
SteamMachine定价或为699美元 大家想入手吗?
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
Win11怎么开启省电模式_Win11电池节电模式自动开启
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
狙击外星人小游戏开始_狙击外星人小游戏立即开始
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
J*aScript教程:根据元素文本内容动态设置背景色
AI泡沫首次被“刺破”:GPU十年都无法存活!
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
Django表单提交验证失败后保持字段值不刷新
Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】
J*aScript中管理异步API调用:确保操作顺序与数据一致性
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
AO3中文官网链接_AO3网页版稳定镜像站
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
汽车之家官方网站官网入口_汽车之家网页版直接进入
J*aScript map 迭代中检测空数组元素的有效方法
C#中解析不规范的HTML为XML 常见的坑与解决办法
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
新手怎么开始学化妆 零基础化妆入门教程
微信网页版官方入口教程 微信网页版网页版快速登录步骤
《刺客信条:影》PS5 Pro和Switch 2画面对比
Archive of Our Own官网直达 AO3最新可用地址一览
uc浏览器网页版入口 uc浏览器网页版最新网址
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
steam官方入口大全 steam账号注册及操作指南
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
CSS实现侧边栏导航项全宽圆角悬停背景效果
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画


2025-09-24
浏览次数:次
返回列表
RT和DELETE操作维护关系,配合外键约束确保数据完整性。