iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL如何进行表之间的关联更新
  • 295
分享到

MySQL如何进行表之间的关联更新

mysql数据库 2023-09-21 18:09:28 295人浏览 独家记忆
摘要

在实际编程工作或运维实践中,对Mysql数据库表进行关联更新是一种比较常见的应用场景,比如在电商系统中,订单表里保存了商品名称的信息(冗余字段设计),但如果商品名称发生变化,则需要通过关联商品id,把新的商品名称更新到订单表中;或者,学

0823e9be0037de0487fd8351116f6939.gif

在实际编程工作或运维实践中,对Mysql数据库表进行关联更新是一种比较常见的应用场景,比如在电商系统中,订单表里保存了商品名称的信息(冗余字段设计),但如果商品名称发生变化,则需要通过关联商品id,把新的商品名称更新到订单表中;或者,学生表中保存了班级信息,但关联的班级表发生变化,那么学生表也需要同步更新,等等。

针对这样的业务场景,我们来看看有什么方法可以实现关联更新,当然,这样的知识相对比较基础,资深或者高级专业人士请绕行,以免留下笑柄,但如果你记得不是很清楚,或者还不是很确定,可以尝试往下看看。同时,在面试过程中,也经常会问起这样的问题,以考察候选人的基础知识掌握水平。

一、准备工作

我们首先创建演示用的数据库表,一张是订单表,里面包含了商品id和商品名称,一张是商品表,保存了商品的基本信息,两张表通过商品id进行关联,创建完成后,我们向表中插入一些简单的测试数据。

首先创建两张表:

CREATE TABLE `t_order` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `product_id` int(11) DEFAULT NULL COMMENT '商品id',  `product_name` varchar(32) DEFAULT NULL COMMENT '商品名称',  `amout` decimal(10,2) DEFAULT NULL COMMENT '订单金额',  `order_time` timestamp NULL DEFAULT NULL COMMENT '下单时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_product` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `product_name` varchar(32) DEFAULT NULL COMMENT '商品名称',  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

再插入一些简单的测试数据:

INSERT INTO `t_order` VALUES ('1', '1', '科幻图书', '25.00', '2023-08-21 17:16:54');INSERT INTO `t_order` VALUES ('2', '2', '台灯', '12.00', '2023-08-21 17:17:22');INSERT INTO `t_order` VALUES ('3', '128', '篮球', '82.00', '2023-08-21 17:18:18');
INSERT INTO `t_product` VALUES ('1', '编程书籍', '2023-08-21 17:15:24');INSERT INTO `t_product` VALUES ('2', '电饭锅', '2023-08-21 17:15:27');INSERT INTO `t_product` VALUES ('3', '加薪神器', '2023-08-21 17:16:00');

执行上面的sql后,表中的数据是这样的:

f29b2c584e50c31d85bb63e6f9ec5fe0.png

730b530f8ca2cb1334b25d0309695449.png

二、通过JOIN进行关联更新

也就是通过INNER JOIN或者LEFT JOIN进行关联更新,当然,使用RIGHT JOIN也可以,只不过关联的主表变成了右边的那张,更多是一个习惯问题。我们先看看INNER JOIN的情况:

UPDATE t_order oINNER JOIN t_product p ON o.product_id=p.idSET o.product_name=p.product_name

SQL如上所示,它把订单表中的商品名称字段值更新为商品表中的商品名称,更新后订单表的结果如下:

a3e40a0093ea7dba1a001ba8841e869b.png

可以看到,product_id等于1和2的商品名称,已经更新为商品表中的最新结果,之前的商品名称分别为科幻图片和台灯,执行sql后,更新为商品表中对应id的名称,分别为编程书籍和电饭锅。执行信息显示,有两行数据受到了影响。

上面是用INNER JOIN进行更新,如果使用LEFT JOIN(sql不用任何其它修改,只把INNER换成LEFT即可),结果稍有不同:

4fdf4190a994a84ea5b8ba007e74dfed.png

可以看到,product_id=128的记录,它的商品名称被更新为NULL值了,而且执行信息也显示,有三行数据受到了影响。这主要是因为内联接和左联接的处理逻辑不同,INNER JOIN是强关联,而对LEFT JOIN来说,即使副表没有满足条件的数据,也会处理成NULL,详细区别可参考相关资料。

三、通过子查询进行处理

可以通过子查询的方式进行关联更新:

UPDATE t_order tSET t.product_name = (SELECT product_name FROM t_product p WHERE t.product_id = p.id)

更新操作也是影响了三行数据,同时,对于product_id=128的数据,它的商品名称更新为NULL值,跟LEFT JOIN的效果一样:

32c63902c0a187a0b9bce785ba0dd40f.png

四、直接UPDATE多表

根据UPDATE语法规则,它后面可以直接跟随多个表,表之间使用逗号分隔:

UPDATE t_order o, t_product p SET o.product_name=p.product_nameWHERE o.product_id=p.id

执行信息提示影响了2行数据,它的效果跟INNER JOIN是一样的,product_id=128的数据没有被更新,还保持原状:

714df2712161f31d38726789f6447079.png

五、结尾

多表关联更新也是非常常见的业务场景,不光是编写代码时会碰到这样的需求,在数据库运维时,也常常会做这样的操作。完成这样的需求,有多种不同的实现手段,我们从上面可以看到,这些方法之间也有些细微的差别:不满足关联条件的数据是否也进行了更新。这个就依需求而定了。

都看到这里了,请帮忙一键三连啊,也就是点击文末的在看、点赞、分享,这样会让我的文章让更多人看到,也会大大地激励我进行更多的输出,谢谢!

推荐阅读:

高频面试题:多线程顺序打印ABC字符20次

一网打尽:MySQL索引失效的场景大搜罗

这个设计模式的用法,一般人我不告诉他

《论语》是很多公司取名的源泉

来源地址:https://blog.csdn.net/weixin_44742132/article/details/132419324

您可能感兴趣的文档:

--结束END--

本文标题: MySQL如何进行表之间的关联更新

本文链接: https://www.lsjlt.com/news/414427.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL如何进行表之间的关联更新
    在实际编程工作或运维实践中,对MySQL数据库表进行关联更新是一种比较常见的应用场景,比如在电商系统中,订单表里保存了商品名称的信息(冗余字段设计),但如果商品名称发生变化,则需要通过关联商品id,把新的商品名称更新到订单表中;或者,学...
    99+
    2023-09-21
    mysql 数据库
  • mysql实现多表关联更新的详细方法
    不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的。&n...
    99+
    2022-10-18
  • Laravel如何仅更新时间戳和关联时间戳
    这篇文章将为大家详细讲解有关Laravel如何仅更新时间戳和关联时间戳,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。仅更新时间戳和关联时间戳与上一个例子恰好相反,也许您需要仅更新 updated_at 字...
    99+
    2023-06-27
  • mysql 多表关联查询如何改进
    mysql 多表关联查询怎么优化好呢 🚨 使用正确的连接类型优化 WHERE 子句为关联字段创建索引减少查询的字段考虑使用分布式查询尽量避免子查询优化连接顺序利用 EXPLAIN 分析查询分解复杂查询使用视图...
    99+
    2023-08-28
    mysql 数据库 sql 多表 优化
  • mysql如何关联更新删除不走索引优化
    这篇文章给大家分享的是有关mysql如何关联更新删除不走索引优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关于update in不走索引的:首先select子查询形...
    99+
    2022-10-18
  • 怎么对MySQL数据库中表的数据进行更新
    小编给大家分享一下怎么对MySQL数据库中表的数据进行更新,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Update语句的基本语...
    99+
    2022-10-18
  • navicat如何看两表之间的关系
    这篇文章主要介绍了navicat如何看两表之间的关系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL 是一个关系型数据库,由瑞典 M...
    99+
    2022-10-18
  • 我们如何更新 MySQL 表中的值?
    借助 UPDATE 语句和 WHERE 子句,我们可以更新表中单行或多行的值。 MySQL 根据 WHERE 子句中指定的条件更新值。例如,假设在“employee”表中我们想要更改 id 为 1 的员工的“name...
    99+
    2023-10-22
  • MySQL NDB如何进行批量更新100万行数据
    本篇文章为大家展示了MySQL NDB如何进行批量更新100万行数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 生产NDB数据库中...
    99+
    2022-10-18
  • MySQL级联复制下如何进行大表的字段扩容
    目录mysql级联复制下进行大表的字段扩容一、背景二、库表信息三、方案选择四、如何进行操作五、总结MySQL级联复制下进行大表的字段扩容 作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关...
    99+
    2023-04-24
    mysql字段扩容 mysql级联复制 mysql大表字段扩容
  • 我们如何像更新 MySQL 表中的值一样更新 MySQL 视图中的任何值?
    众所周知,借助 UPDATE 语句,我们可以更新 MySQL 表中的值,并且以类似的方式我们可以更新 MySQL 视图中的值。 UPDATE 语句的语法是相同的,除了在表名的地方我们必须提供视图的名称。我们从名为“Info”的视图中...
    99+
    2023-10-22
  • MySQL和PostgreSQL之间如何跨数据库进行复制
    这篇文章主要介绍“MySQL和PostgreSQL之间如何跨数据库进行复制”,在日常操作中,相信很多人在MySQL和PostgreSQL之间如何跨数据库进行复制问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2022-10-18
  • vuex与组件data之间的数据更新如何实现
    这篇文章主要讲解了“vuex与组件data之间的数据更新如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vuex与组件data之间的数据更新如何实现”吧!问题我们都知道,在Vue组件中...
    99+
    2023-07-04
  • mysql如何删除数据表和关联的数据表删除详情
    目录前言一、mysql删除没有被关联的表二、删除被其他表关联的主表前言 删除数据表的时候,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做一个备份,以免造成无法挽回的后果。 mysql删除数...
    99+
    2022-07-26
    mysql删除数据表 mysql关联数据表删除
  • 如何更改 MySQL 表中行实例的值?
    UPDATE 命令与 WHERE 子句一起可用于更改行实例的值。基本上,MySQL 会根据查询中给出的条件更改值。下面的例子可以演示它假设我们想在下面给出的“testing”表中将名称从“Ram”更改为“Mohit” -my...
    99+
    2023-10-22
  • 如何借助MySQL连接实现表之间的INTERSECTION?
    实际上,INTERSECTION 只是所有列的内部联接。我们以两个表为例,数据如下 -mysql> Select * from value1; +------+------+ | i | j | +------+...
    99+
    2023-10-22
  • mysql中UPDATE语句,关联两张表,将一个表中的字段根据条件更新到另一个表中,不需要子查询
    例如:当contract表中的customer_name等于customer表的name时,将contract表中的customer_id字段更新为customer表的id如果用子查询可能会这样写: UPDATE contract ...
    99+
    2023-09-13
    sql java 数据库
  • 如果存在 FOREIGN KEY 约束,MySQL 父表和子表之间存在什么样的关系?
    父表和子表之间的关系是一对多关系。可以用“customer”和“orders”两个表的例子来理解。这里,“customer”是父表,“orders”是子表。这种关系是一对多的,因为一个客户可以有多个订单。可以通过在两个表中插入值来演示,如下...
    99+
    2023-10-22
  • 用列的值填充字符串后如何更新 MySQL 表
    要用列的值填充字符串并更新 MySQL 表,你可以使用 UPDATE 语句结合 CONCAT 函数来实现。以下是一个示例查询,假设有...
    99+
    2023-10-20
    MySQL
  • 用列的值填充字符串后如何更新 MySQL 表?
    我们可以使用LPAD()或RPAD()函数以及UPDATE子句,在填充字符串的同时更新MySQL表中的列的值。以下是使用'examination_btech'表的示例,将使其更清晰-示例假设我们想要在列course的最后附加...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作