MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
17746 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

06 | 外键和连接:如何做关联查询?

你好,我是朱晓峰。今天我来和你聊一聊关联查询的问题。
在实际的数据库应用开发过程中,我们经常需要把 2 个或 2 个以上的表进行关联,以获取需要的数据。这是因为,为了提高存取效率,我们会把不同业务模块的信息分别存放在不同的表里面。但是,从业务层面上看,我们需要完整全面的信息为经营决策提供数据支撑。
就拿咱们的超市项目来说,数据库里面的销售流水表一般只保存销售必需的信息(比如商品编号、数量、价格、金额和会员卡号等)。但是,在呈现给超市经营者的统计报表里面,只包括这些信息是不够的,比如商品编号、会员卡号,这些数字经营者就看不懂。因此,必须要从商品信息表提取出商品信息,从会员表中提取出会员的相关信息,这样才能形成一个完整的报表。这种把分散在多个不同的表里的数据查询出来的操作,就是多表查询
不过,这种查询可不简单,我们需要建立起多个表之间的关联,然后才能去查询,同时还需要规避关联表查询中的常见错误。具体怎么做呢?我来借助实际的项目给你讲一讲。
在我们项目的进货模块,有这样 2 个数据表,分别是进货单头表(importhead)和进货单明细表(importdetails),我们每天都要对这两个表进行增删改查的操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在数据库应用开发中进行关联查询的重要性和实际操作。作者以超市项目为例,详细说明了在统计报表中需要从不同表中提取数据的情况,引出了多表查询的复杂性。文章重点介绍了在MySQL中如何使用外键和连接来实现表之间的关联和查询操作。作者强调了外键约束的重要性,指出它可以确保数据的一致性,避免数据缺失的情况。同时,还提到了在MySQL中的内连接和外连接的使用方法,并通过实际案例演示了如何使用内连接和外连接来实现关联查询的操作。总结部分提到了在高并发等情况下,无法使用外键约束时,需要在应用层面实现外键约束的逻辑功能,以确保系统的正确可靠。整体而言,本文内容丰富,涵盖了关联查询的重要性、技术细节和应用场景,对于数据库开发人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • 朱晓峰
    置顶
    你好,我是朱晓峰,下面我就来公布一下上节课思考题的答案: 上节课,我们学习了设置数据表主键的三种方式。下面是思考题的答案: UPDATE demo.trans AS a, demo.goodsmaster AS b SET price = price * 0.8 WHERE a.itemnumber = b.itemnumber AND b.unit = '包'
    2021-04-21
    6
    5
  • Stock66
    不过我看到一份PDF上这么写。 阿里巴巴JAVA开发手册嵩山版.pdf 第41页/全59页 提到 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:(概念解释)学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的student_id,同时触发成绩表中的student_id更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

    作者回复: 厂家根据自己的情况制定数据库开发策略,完全没问题

    2021-04-19
    29
  • lesserror
    外键约束,可以简单有效的保证数据的可靠性。适合内部管理系统使用,因为访问量不会太大。如果是面向外界用户使用的应用,外键所带来的性能损耗,可能无法支撑大批用户的同时访问。 但是,数据的可靠性和唯一性才是最重要的,在保证一次对多张表操作的过程中,可以使用事务来确保操作的一致性。

    作者回复: 在系统开销和使用的功能之间需要做好平衡,既要确保数据可靠性和唯一性,又要确保系统可用

    2021-03-20
    15
  • 右耳朵猫咪
    文中说“左连接,一般简写成 LEFT JOIN,返回左边表中的所有记录,以及右表中符合连接条件的记录。”感觉不太准确,应该是不管连接条件是否满足,都会返回,如果符合连接条件,就返回右表对应的记录,如果不符合连接条件,就标注为null。

    作者回复: 这里的意思是指返回的数据记录,返回左表的全部记录,以及右表中符合连接条件的记录,如果不符合连接条件,MySQL会返回NULL

    2021-03-22
    8
  • 🌈X-Dragon丶
    老师讲课很好,实战举例很符合现实,也简洁易懂,小白也看得懂,为老师点个赞👍🏻

    作者回复: 谢谢鼓励!

    2021-03-24
    6
  • peter
    不考虑应用层面,只考虑数据库层面,没有外键能进行关联查询吗?(或者这样说: 没有外键,在数据库层面用SQL语句能进行关联查询吗?

    作者回复: 可以,请看06篇。考虑到数据一致性,在数据表比较多时尽量还是设置外键,查询更方便。

    2021-03-20
    3
  • SharpBB
    思考题: 我们公司是不用外键的,并发量还是有些的,其实我也觉得麻烦。 所以在两表有关联关系的时候,需要通过事务来解决,删除了A表数据的同时,B表相关数据也要进行删除,如果发生了异常,就进行事务的回滚。

    作者回复: 请参考思考题答案

    2022-02-09
    1
  • SharpBB
    1.外键 两表建立了关联关系 删除某项数据的时候 另一张表的某条数据也要相应删除才行 提升了系统的可靠性 2.连接 内连接 取两表的交集部分 左连接 取左表全部数据 右表部分数据 右连接 取右表全部数据 左边部分数据 左右取其一即可 3.总结 在低并发的数据库系统里 外键关系可以确保数据的可靠性 在高并发的场景 根据阿里规约 不应该使用外键 而应在业务场景确保逻辑的一致 不存在绝对的好坏 一切都要根据场景来决定到底用不用

    作者回复: 好的

    2022-02-09
  • 夜下不眠猫
    你好,老师,我想请问一下,如果我想要要同时关联查询多个关联数据怎么办呢,就比如我有三个得到的另一个表的对应的三个id数据,我想一次性应用这三个id数据获取另一个表中这三个对应的具体数据怎么办呢

    作者回复: 多个表的关联,可以通过2个表的关联实现。比如3个表a,b,c,可以先通过a与b关联,得到的结果再与c关联。以此类推,就可以实现多个表的关联了。

    2021-12-19
    2
  • 雪峰
    在创建主表demo.importhead的时候遇到了1050 - Table 'importhead' already exists的错误,解决方法是在create table 后加上 if not exists便可解决。

    作者回复: 是的

    2021-09-22
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部