【个人笔记】《知了堂》MySQL三种关系:一对一,一对多,多对多。
一对一:比如一个学生对应一个身份证号、学生档案;
一对多:一个班可以有很多学生,但是一个学生只能在一个班;
多对多:一个班可以有很多学生,学生也可以有很多课程;
一对多关系处理:
我们以学生和班级之间的关系来说明一对多的关系处理方法。
假设现有基本表班级表(班级号,备注信息,……)。学生表(学号,姓名),

方法一:
在学生表中新增字段(班级号),该字段作为学生表的外键与班级表中的班级号关联。每一个学生实体在班级号字段的值,表示该学生属于的班级。
方法二:
新增一个关系表,用来表示学生与班级的属于关系,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。
代码示例:
-- 创建班级表
CREATE TABLE t_class(
c_id INT PRIMARY KEY AUTO_INCREMENT, --班级id
c_name VARCHAR(20) NOT NULL UNIQUE --班级名称
)
-- 删除学生表
DROP TABLE t_student;
-- 创建学生表
CREATE TABLE t_student(
s_id INT PRIMARY KEY AUTO_INCREMENT, --主键id
s_name VARCHAR(15) UNIQUE, --姓名
s_sex VARCHAR(5) DEFAULT '男', --性别
s_age INT, --年龄
s_class_id INT, --班级id
使用外键关联班级表的主键,附:表的外键必须是另一张表的主键
CONSTRAINT FOREIGN KEY(s_class_id) REFERENCES t_class(c_id)
)
-- 添加数据
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('刘基','男','20')
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('老刘','男','22')
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('唐伯虎','男','20')
小结:一般情况下,一对多关系采用方法一来处理。
多对多关系处理:

在多对多关系中,我们要新增加一个关系表。在学生表和课程表的基础上增加选课表来表示学生与课程之间的多对多关系。在选课表中,必须含有的属性有学生号和课程号。(学生号,课程号)这个属性集刚好也就是选课表的关键字。
代码示例:
-- 创建学生表
CREATE TABLE student(
t_id INT PRIMARY KEY AUTO_INCREMENT, -- 学号
t_name VARCHAR(20), -- 学生名字
t_age INT, -- 年龄
t_sex CHAR(4), --性别
t_date DATE,
t_enrolDate DATETIME,
t_class VARCHAR(20)
)
-- 创建班级表
CREATE TABLE class(
b_id INT PRIMARY KEY AUTO_INCREMENT,
b_name VARCHAR(20), --编辑编号
b_bname VARCHAR(50), --班级名称
b_start DATE --开班时间 类型 date
)
-- 成绩表
CREATE TABLE grade(
c_id INT,
c_nameId INT, --学生id 类型 int
c_courseId VARCHAR(40), --课程编号 类型 varchar
c_coursegrade INT, --课程成绩 类型 int
c_exam DATE --考试时间 类型 date
)
-- 课程表
CREATE TABLE course(
k_id VARCHAR(40), --课程编号 类型 varchar
k_name VARCHAR(40) --课程名称 类型 varchar
)
【个人笔记】《知了堂》MySQL三种关系:一对一,一对多,多对多。的更多相关文章
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- MySQL学习7 - 外键的变种 三种关系
一 介绍 二 如何找两张表之间的关系 三 表的三种关系 1.书和出版社 2.作者和书籍的关系 3.用户和博客 本节的重点 如何找出两张表之间的关系 表的三种关系 一 介绍 因为有foreign key ...
- mysql外键的三种关系
因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 一对多或多对一 create table press( id int primary key auto_inc ...
- mysql更新(五) 完整性约束 外键的变种 三种关系 数据的增删改
11-数据的增删改 本节重点: 插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 再来回顾一下之前我们练过的一些操作,相信大家都对插入数据.更新数据.删除数据有了全面的认识. ...
- Mysql外键的变种 三种关系
一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出两张表之间的关系 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以 ...
- day03 mysql外键 表的三种关系 单表查询 navicat
day03 mysql navicat 一.完整性约束之 外键 foreign key 一个表(关联表: 是从表)设置了外键字段的值, 对应的是另一个表的一条记录(被关联表: 是主 ...
- Mysql -- 外键的变种 三种关系
一.介绍 因为有foreign key的约束, 使得两张表形成了三种关系 多对一 多对多 一对一 二.如果找出两张表之间的关系 #.先站在左表的角度去找 是否左表的多条记录可以对应右 ...
- python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)
一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...
- 完整性约束&外键变种三种关系&数据的增删改
完整性约束 本节重点: not null 与 default unique primary auto_increment foreign key 一.介绍 约束条件与数据类型的宽度一样,都是可选参数 ...
随机推荐
- 美国总统大选,黑客组织“匿名者”(Anonymous)也来凑热闹
美国总统大选,黑客组织"匿名者"(Anonymous)也来凑热闹 黑客组织"匿名者"向美国总统共和党候选人唐纳德•特朗普宣战,发誓将从4月1日开始向其发动大规模 ...
- js 在遍历时只会显示最后一个遍历到的结果
在做项目时遇到了一个关于遍历的问题, 前提是:在ul中有n个li每个li从后台获取的数据中有一个sign的字段,当sign等于0时(li未被点击过)li会显示一个红点,当sign不等于0时(li已被点 ...
- Spring中AOP简介与切面编程的使用
Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...
- Intelli IDEA学习系列之快捷键篇
Intelli IDEA学习系列之快捷键篇 IDEA简介: IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能 ...
- Hibernate注解-类级别注解
- html:table属性cellpadding
cellpadding:单元格边距(空白区域) colspan:可以横跨的列数(td/th都算一列) 详细:http://www.dreamdu.com/xhtml/attribute_cellpad ...
- postman 第1节 安装启动(转)
安装: 1.mac app安装 浏览器访问https://www.getpostman.com/apps,选择Get the Mac App,下载安装即可 2.chrome app安装 浏览器访问ht ...
- Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL
Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL 严重: Error config ...
- WCF(二)三种通信模式
WCF在通信过程中有三种模式:请求与答复.单向.双工通信 请求与答复模式 客户端发送请求,然后一直等待服务端的响应答复(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 请求 ...
- if判断与比较操作符gt、lt、eq等的使用
在整数中比较使用如下 //-eq 等于(equal) if [ "$a" -eq "$b" ] //-ne不等于(no equal) if [ "$ ...