MySQL——数据库表关系
文章目录
- 一. mysql数据库中常见表关系
- 二. 一对一关系
- 1. 特点
- 2. 示例代码
- 三. 一对多关系
- 1. 特点
- 2. 示例代码
- 四. 多对多关系
- 1. 特点
- 2. 示例代码
- 五. 两表关联查询
- 1. 分类
- 2. 内连接查询
- 2.1 语法
- 3.1 示例代码
- 3. 外连接查询
- 3.1 语法
- 3.2 示例
- 4. 自连接查询
- 4.1 概述
- 4.2 示例代码
一. mysql数据库中常见表关系
- 单表操作,表之间没有关联关系
- 两表关联关系:一对一、一对多、多对多关系
二. 一对一关系
1. 特点
- 一对一的两个表中,通常通过外键约束来实现表关联。
- 一对一表关系中,一张表的主键也是另外一张表的外键。
- 外键所在的表我们通常可以叫从表,关联的另外一张表通常叫主表。
- 一对一表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
- 一对一表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。
设置表的外键约束:
- ALTER TABLE 从表名
- ADD CONSTRAINT 外键名称
- FOREIGN KEY 从表关联外键
- REFERENCES 关联主表名称(主表id)
2. 示例代码
一对一表关系:
- 手动创建丈夫表和妻子表
- 通过sql代码添加表外键约束
- 测试数据的添加和删除效果
#设置外键约束:
ALTER TABLE husband #设置从表名称
ADD CONSTRAINT fk_husband_wife #外键约束名称
FOREIGN KEY (hid) #外键字段
REFERENCES wife(wid); #主表及关联的主键字段#增加数据:增加丈夫表数据的时候需要先增加妻子表数据
INSERT INTO wife(wname) VALUES("刘贝");
INSERT INTO husband (hname) VALUES("张三丰");
#删除数据:如果存在关联数据,先删除丈夫表数据,再删除妻子表,如果没有关联数据则直接删除数据
DELETE FROM husband ;
DELETE FROM wife ;
#删除某一条不关联的妻子数据
DELETE FROM wife WHERE wid=1;
三. 一对多关系
1. 特点
- 一对多关系中,一的一方叫主表,多的一方叫从表
- 外键存在于从表中,在从表中专门设置一个字段作为外键关联主表的主键id字段
- 一对多表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
- 一对多表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。
设置外键约束方法和一对一设置一样操作。
2. 示例代码
一对多关系
- 手动创建一张主表:商品分类表
- 手动创建一张从表:商品表
- 通过sql代码设置两个表的外键约束
- 测试增加和删除效果
ALTER TABLE goods #设置从表名称
ADD CONSTRAINT fk_goods_sorts #外键约束名称
FOREIGN KEY (sort_id) #外键字段
REFERENCES sorts(sid); #主表及关联的主键字段
#增加数据:先增加分类数据再增加商品数据
INSERT INTO sorts(sname) VALUES("电脑");
INSERT INTO goods (gname,price,sort_id)VALUES("苹果电脑",6500,2);
#删除数据:先删除商品数据,再删除分类数据
DELETE FROM goods WHERE gid=3;
DELETE FROM sorts WHERE sid=2;
四. 多对多关系
1. 特点
- 多对多关系中,需要有一个专门的外键表存在,用来存储两个表的关联外键
- 多对多关系中,外键所在的表叫从表,两个多对多关系表叫主表
- 多对多表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
- 多对多表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。
2. 示例代码
多对多关系
- 手动创建一张学生表
- 手动创建一张课程表
- 手动创建一张外键表
- 通过sql代码设置外键关联
- 测试数据增加和删除
#设置外键关联:学生表关联
ALTER TABLE fks #设置从表名称
ADD CONSTRAINT fk_students #外键约束名称
FOREIGN KEY (student_id) #外键字段
REFERENCES students(sid); #主表及关联的主键字段#设置外键关联:课程表关联
ALTER TABLE fks #设置从表名称
ADD CONSTRAINT fk_course #外键约束名称
FOREIGN KEY (course_id) #外键字段
REFERENCES course(cid); #主表及关联的主键字段#测试增加:需要先增加学生和课程数据,再增加中间表外键数据
INSERT INTO students(sname,phone)VALUES("张三","13312354568");
INSERT INTO course(cname)VALUES("大数据");
INSERT INTO fks(student_id,course_id)VALUES(1,2);#删除数据:先删除外键中间表数据,再删除学生和课程数据
DELETE FROM fks WHERE student_id=1;
DELETE FROM students WHERE sid=1;
五. 两表关联查询
1. 分类
mysql数据库中,涉及到两表或者多表关联查询的时候
通常有以下几种方式:
- 内连接查询
- 外连接查询
- 自连接查询
2. 内连接查询
2.1 语法
1.隐式内连接:where关键字使用select * from A,B where A.外键=B.主键2.显式内连接:inner join使用
select * from A inner join B on A.外键=B.主键
3.1 示例代码
内连接查询练习
#查询所有商品和商品对应的分类信息
#隐式内连接查询:通过关联的外键和主键相等来实现
SELECT * FROM sorts ,goods
WHERE sorts.`sid`=goods.`sort_id`;
#显示内连接
SELECT * FROM sorts INNER JOIN goods
ON sorts.`sid`=goods.`sort_id`;
3. 外连接查询
3.1 语法
1.左外连接查询:select * from A left join B on A.外键=B.主键效果:left左边的A表数据会全部显示出来,无论是否两表有关联的数据都会显示2.右外连接查询select * from A right join B on A.外键=B.主键效果:right右边的B表数据会全部显示出来,无论是否两表有关联的数据都会显示
3.2 示例
外连接查询
#左外链接查询
SELECT * FROM sorts LEFT JOIN goods
ON sorts.`sid`=goods.`sort_id`;
#右外连接查询
SELECT * FROM goods RIGHT JOIN sorts
ON sorts.`sid`=goods.`sort_id`;
4. 自连接查询
4.1 概述
所谓自连接查询,其实查询的是一张表数据,需要在执行查询的时候,虚拟出另外一张表的操作。表中主键id会和表的其中一个字段关联
4.2 示例代码
自连接查询
需要虚拟出一张表进行操作
#查询员工姓名以及员工对应的领导姓名
SELECT e.`ename` 直属领导 ,p.`ename` 员工姓名
FROM emp e,emp p
WHERE e.`empno`=p.`mgr`;
MySQL——数据库表关系相关推荐
- ER图和关系模型到MySQL数据库表
本篇主要介绍了MySQL数据库表从ER图到关系模型,再到数据库表的创建过程及其表结构的修改.通过本篇的学习,可以掌握以下内容: ● 应用ER图和关系模型创建数据库表 ● 数据库表结构的修改 1.moo ...
- mysql数据库对象关系映射
http://www.2cto.com/database/201310/248690.html mysql数据库对象关系映射 1.对"对象关系映射"的理解 a.对象:可以理解为ja ...
- unicode表_Python数据库操作 Mysql数据库表引擎与字符集#学习猿地
# Mysql数据库表引擎与字符集 ![](./imgs/752951346A5F4E7EBDE362FA97107707.png) ### 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是 ...
- 7.Mysql数据库表引擎与字符集
7.Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进 ...
- MySQL数据库表设计
MySQL数据库表设计 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要 ...
- MySQL数据库表引擎与字符集
Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进程处 ...
- 单元测试系列之八:Sonar 数据库表关系整理一(续)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...
- 程序员面试之MySQL数据库表的设计
如果要选择一门程序员必备的技能,那答案无疑是数据库,而MySQL是首选.很多企业在面试过程中会提问MySQL数据库表设计要注意什么,接下来小千就给大家讲解一下. MySQL相较于MSSQL SERVE ...
- 一个漂亮的输出MySql数据库表结构的PHP页面
经常为了方便和直观,我们会首先直接在数据库中设计出表,但是接下来又要将表的结构和设计编写在设计文档中,以便编码的时候可以直观的查询,一旦数据库表非常多,字段非常多的时候,这无疑是件非常郁闷的工作. 这 ...
最新文章
- popwindow下拉筛选 二级联动_职场人必备!一分钟搞定Excel二级联动下拉菜单
- 2048c语言程序,C语言实现2048小游戏
- java技术入门培训_入门java怎么自学?推荐谁的课程?
- 深度学习入门笔记系列(一)——深度学习框架 tensorflow 的介绍与安装
- 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
- 防范因编写代码产生的系统漏洞
- 虹软2.0 离线人脸识别 Android 开发 Demo
- 九度OJ 1068:球的半径和体积 (基础题)
- 全网首发:SHELL多个判断条件,不会短路
- qpython 3h下载_【分享】QPython 3H3.0.0 一个伟大的脚本编辑器!
- 阿里用回mysql_回mysql事务
- 2022年8月又更新了:房测之友(BMF2018)免数据库版BMFse,有点高大上的样子
- 真方位角计算文献汇总:球面三角形两点之间的方位
- 协议在计算机网络有什么作用是什么意思,网络协议作用是什么
- 图像语义分割入门:FCN/U-Net网络解析
- 硬件转行之路——自学Web前端开发(一)
- JavaScript之构造函数 Constructor
- Vue开发常用的工具有哪些?
- 又一波利好,FN难道又要起飞了?
- python优点是代码库支持、灵活_Python 3.6版本实现用户群的不断增长