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

MySQL多表关系

1.多表关系

一对多

案例:部门和员工的关系

关系:一个部门对应多个员工,一个员工对应一个部门

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

-- 创建部门表
CREATE TABLE dept (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL
);
​
-- 创建员工表
CREATE TABLE emp (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL,dept_id INT,FOREIGN KEY (dept_id) REFERENCES dept(id)
);
​
-- 向部门表插入数据
INSERT INTO dept (name) VALUES
('研发部'),
('市场部'),
('财务部'),
('销售部');
​
-- 向员工表插入数据
INSERT INTO emp (name, age, dept_id) VALUES
('张无忌', 20, 1),
('杨逍', 33, 2),
('赵敏', 18, 3),
('常遇春', 43, 4);

多对多

案例:学生与课程的关系

关系:一个学生可以选多门课程,一个课程也可以供多个学生选择

实现:建立第三张中间表,中间表至少包含两个外键,分别管理两方主键

-- 创建学生表
CREATE TABLE student (id INT AUTO_INCREMENT PRIMARY KEY comment '主键ID',name VARCHAR(50) NOT NULL comment '姓名',no VARCHAR(20) NOT NULL UNIQUE comment '学号'
) comment '学生表';
​
-- 创建课程表
CREATE TABLE course (id INT AUTO_INCREMENT PRIMARY KEY comment '主键ID',name VARCHAR(50) NOT NULL comment '课程名'
) comment '课程表';
​
-- 创建学生课程关系表
CREATE TABLE student_course (id INT AUTO_INCREMENT PRIMARY KEY comment '主键ID',student_id INT comment '学生ID',course_id INT comment '课程ID',FOREIGN KEY (student_id) REFERENCES student(id) ,FOREIGN KEY (course_id) REFERENCES course(id) 
);
​
-- 向学生表插入数据
INSERT INTO student (name, no) VALUES
('黛绮丝', '2000100101'),
('谢逊', '2000100102'),
('殷天正', '2000100103'),
('韦一笑', '2000100104');
​
-- 向课程表插入数据
INSERT INTO course (name) VALUES
('Java'),
('PHP'),
('MySQL'),
('Hadoop');
​
-- 向学生课程关系表插入数据
INSERT INTO student_course (student_id, course_id) VALUES
(1, 1),
(1, 2),
(2, 2),
(1, 3),
(3, 3),
(2, 4),
(4, 1),
(2, 1),
(4, 4);

一对一

案例:用户与用户详细信息的关系

关系:一对一用多表拆分把基础字段放在一张表,另外字段放另一张表,提升操作效率

实现:在任意一方加入外键,关联另一方的主键,且设外键为唯一(unique)

-- 创建用户基本信息表
CREATE TABLE tb_user (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL,gender TINYINT NOT NULL,phone VARCHAR(15) NOT NULL
);
​
-- 创建用户教育信息表
CREATE TABLE tb_user_edu (id INT AUTO_INCREMENT PRIMARY KEY,degree VARCHAR(20) NOT NULL,major VARCHAR(50) NOT NULL,primaryschool VARCHAR(100) NOT NULL,middleschool VARCHAR(100) NOT NULL,university VARCHAR(100) NOT NULL,FOREIGN KEY (id) REFERENCES tb_user(id)
);
​
-- 向用户基本信息表插入数据
INSERT INTO tb_user (name, age, gender, phone) VALUES
('黄渤', 45, 1, '18800001111'),
('冰冰', 35, 2, '18800002222'),
('马云', 55, 1, '18800008888'),
('李彦宏', 50, 1, '18800009999');
​
-- 向用户教育信息表插入数据
INSERT INTO tb_user_edu (degree, major, primaryschool, middleschool, university) VALUES
('本科', '舞蹈', '静安区第一小学', '静安区第一中学', '北京舞蹈学院'),
('硕士', '表演', '朝阳区第一小学', '朝阳区第一中学', '北京电影学院'),
('本科', '英语', '杭州市第一小学', '杭州市第一中学', '杭州师范大学'),
('本科', '应用数学', '阳泉第一小学', '阳泉区第一中学', '清华大学');
http://www.lqws.cn/news/530191.html

相关文章:

  • Nordic 电源管理nPM1300 EK评估板介绍
  • 大模型在慢性病毒性肝炎预测及诊疗方案制定中的应用研究
  • 频宽是什么: 0.35/Tr、0.5/Tr?
  • 第七章---软件实现与编码
  • 关于 ARM64 汇编:调用流程与栈帧结构解析
  • 酒店智能门锁系统常见问题解决方法——东方仙盟
  • zookeeper总是重启失败
  • Golang是什么
  • AI代码编程工具:开启智能编程新时代
  • uniapp微信小程序:editor组件placeholder字体样式修改
  • Spring Boot 中使用 Jackson 实现全局时间格式处理(支持多格式反序列化)
  • A模块 系统与网络安全 第三门课 网络通信原理
  • Spring AI 入门到实战:我如何用它让系统具备“理解能力”
  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • Pycharm无法运行Vue项目的解决办法
  • Java 泛型详解:从入门到实战
  • jdbc实现跨库分页查询demo
  • 人力资源管理系统
  • Spring Cloud Config动态刷新实战指南
  • 用户统计-01.需求分析和设计
  • GNSS位移监测站在大坝安全中的用处
  • 渗透实战:使用隐式转换覆盖toString的反射型xss
  • Day43 复习日 图像数据集——CNN
  • 【PX4-AutoPilot教程-TIPS】PX4系统命令行控制台ConsolesShells常用命令(持续更新)
  • ES文件管理器v4.4.3(ES文件浏览器)
  • 鸿蒙 FoldSplitContainer 解析:折叠屏布局适配与状态管理
  • MySQL之存储函数与触发器详解
  • 多相机人脸扫描设备如何助力高效打造数字教育孪生体?
  • ethers.js express vue2 定时任务每天凌晨2点监听合约地址数据同步到Mysql整理
  • ASIO 避坑指南:高效、安全与稳健的异步网络编程