文章目录

  • 一. 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. 单表操作,表之间没有关联关系
  2. 两表关联关系:一对一、一对多、多对多关系

二. 一对一关系

1. 特点

  1. 一对一的两个表中,通常通过外键约束来实现表关联。
  2. 一对一表关系中,一张表的主键也是另外一张表的外键。
  3. 外键所在的表我们通常可以叫从表,关联的另外一张表通常叫主表。
  4. 一对一表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
  5. 一对一表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。

设置表的外键约束:

  • ALTER TABLE 从表名
  • ADD CONSTRAINT 外键名称
  • FOREIGN KEY 从表关联外键
  • REFERENCES 关联主表名称(主表id)

2. 示例代码

一对一表关系:

  1. 手动创建丈夫表和妻子表
  2. 通过sql代码添加表外键约束
  3. 测试数据的添加和删除效果
#设置外键约束:
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. 特点

  1. 一对多关系中,一的一方叫主表,多的一方叫从表
  2. 外键存在于从表中,在从表中专门设置一个字段作为外键关联主表的主键id字段
  3. 一对多表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
  4. 一对多表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。

设置外键约束方法和一对一设置一样操作。

2. 示例代码

一对多关系

  1. 手动创建一张主表:商品分类表
  2. 手动创建一张从表:商品表
  3. 通过sql代码设置两个表的外键约束
  4. 测试增加和删除效果
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. 特点

  1. 多对多关系中,需要有一个专门的外键表存在,用来存储两个表的关联外键
  2. 多对多关系中,外键所在的表叫从表,两个多对多关系表叫主表
  3. 多对多表关系中,增加表数据的时候,需要先添加主表数据,然后增加从表数据。
  4. 多对多表关系中,删除表数据的时候,需要先删除从表数据,然后删除主表数据。

2. 示例代码

多对多关系

  1. 手动创建一张学生表
  2. 手动创建一张课程表
  3. 手动创建一张外键表
  4. 通过sql代码设置外键关联
  5. 测试数据增加和删除
#设置外键关联:学生表关联
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数据库中,涉及到两表或者多表关联查询的时候
通常有以下几种方式:

  1. 内连接查询
  2. 外连接查询
  3. 自连接查询

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——数据库表关系相关推荐

  1. ER图和关系模型到MySQL数据库表

    本篇主要介绍了MySQL数据库表从ER图到关系模型,再到数据库表的创建过程及其表结构的修改.通过本篇的学习,可以掌握以下内容: ● 应用ER图和关系模型创建数据库表 ● 数据库表结构的修改 1.moo ...

  2. mysql数据库对象关系映射

    http://www.2cto.com/database/201310/248690.html mysql数据库对象关系映射 1.对"对象关系映射"的理解 a.对象:可以理解为ja ...

  3. unicode表_Python数据库操作 Mysql数据库表引擎与字符集#学习猿地

    # Mysql数据库表引擎与字符集 ![](./imgs/752951346A5F4E7EBDE362FA97107707.png) ### 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是 ...

  4. 7.Mysql数据库表引擎与字符集

    7.Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进 ...

  5. MySQL数据库表设计

    MySQL数据库表设计 ​ 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要 ...

  6. MySQL数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进程处 ...

  7. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  8. 程序员面试之MySQL数据库表的设计

    如果要选择一门程序员必备的技能,那答案无疑是数据库,而MySQL是首选.很多企业在面试过程中会提问MySQL数据库表设计要注意什么,接下来小千就给大家讲解一下. MySQL相较于MSSQL SERVE ...

  9. 一个漂亮的输出MySql数据库表结构的PHP页面

    经常为了方便和直观,我们会首先直接在数据库中设计出表,但是接下来又要将表的结构和设计编写在设计文档中,以便编码的时候可以直观的查询,一旦数据库表非常多,字段非常多的时候,这无疑是件非常郁闷的工作. 这 ...

最新文章

  1. popwindow下拉筛选 二级联动_职场人必备!一分钟搞定Excel二级联动下拉菜单
  2. 2048c语言程序,C语言实现2048小游戏
  3. java技术入门培训_入门java怎么自学?推荐谁的课程?
  4. 深度学习入门笔记系列(一)——深度学习框架 tensorflow 的介绍与安装
  5. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
  6. 防范因编写代码产生的系统漏洞
  7. 虹软2.0 离线人脸识别 Android 开发 Demo
  8. 九度OJ 1068:球的半径和体积 (基础题)
  9. 全网首发:SHELL多个判断条件,不会短路
  10. qpython 3h下载_【分享】QPython 3H3.0.0 一个伟大的脚本编辑器!
  11. 阿里用回mysql_回mysql事务
  12. 2022年8月又更新了:房测之友(BMF2018)免数据库版BMFse,有点高大上的样子
  13. 真方位角计算文献汇总:球面三角形两点之间的方位
  14. 协议在计算机网络有什么作用是什么意思,网络协议作用是什么
  15. 图像语义分割入门:FCN/U-Net网络解析
  16. 硬件转行之路——自学Web前端开发(一)
  17. JavaScript之构造函数 Constructor
  18. Vue开发常用的工具有哪些?
  19. 又一波利好,FN难道又要起飞了?
  20. python优点是代码库支持、灵活_Python 3.6版本实现用户群的不断增长

热门文章

  1. DP1332E是一款SOC的近场通信NFC芯片
  2. JDBC 连接SQL Server数据库时使用1433端口错误
  3. 5G工业网关功能及应用场景
  4. 通过onkeypress和onkeydown事件禁用键盘中某些键
  5. 为什么32 >> 32等于32
  6. 【童年乐趣】十分钟就能用Python做谁是卧底和弹球小游戏
  7. 程序员自我修养-目标文件
  8. java解析yml文件_java读取解析application.yml
  9. Android Checkbox 使用
  10. Java整合activiti工作流,前端适配vue,流程在线绘制设计器,适配在线表单引擎