迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中使用一个查询更新多个表

作者:迹忆客 最近更新:2023/03/13 浏览次数:

在某些情况下,用户想要同时更新逻辑相关的表。这些逻辑相关的表通过一些属性相互链接。

MySQL 一次查询更新多张表的优点

表中的类似属性用于创建更新查询。更新查询根据条件在不同的表中执行多行更新。

当出现类似情况时,适合多个表更新查询。使用这种多表更新查询的好处是:

在 MySQL 中使用 UPDATE 关键字通过一个查询更新多个表

在多表更新查询中,每条满足条件的记录都会被更新。即使条件匹配多次,该行也只会更新一次。

更新多个表的语法不能与 ORDER BYLIMIT 关键字一起使用。

UPDATE 关键字的语法:

UPDATE table1, table2, ...
    SET column1 = value1,
        column2 = value2,
        ...
[WHERE conditions]

多重更新不是 MySQL 语言中存在的组合关键字。语法是由有助于对两个或多个表进行分组的各种关键字的组合形成的,例如 join 关键字。

连接类型用于进行单个查询以一次更新多个表。让我们通过一次更新多个表来理解这一点。

考虑两个名为 librarystu_book 的表。并考虑一本书从图书馆发给学生的情况。

图书馆的图书数量减少了,而有学生的图书数量增加了。这就是需要两个单独调用的场景。

为了避免 RDBMS 表中的单独更新,我们使用单个查询更新两个表中的行。以下是更新调用之前要执行的语句列表。

在对表进行实际查询之前的查询列表:

查询执行 MySQL 语句:

UPDATE library l, stu_book s
    SET l.book_count = l.book_count - 2,
        s.book_count = s.book_count + 2
WHERE l.id = s.book_id;

在上面的查询中,在内部,inner join 合并了两个表,并在检查表的约束后对合并的表进行操作。当没有指定关键字时,将应用内部联接。

像外连接这样的连接,右外连接,用户应该使用正确的关键字。只有在分组的两个表具有相似/匹配属性的情况下才能执行联接。

SET 关键字与 UPDATE 关键字一起用于在现有行中设置新值。它通过在旧值上写入新数据来覆盖旧值。

这里 set 更新了 stu_book 表的书籍数量,并且相同数量的数量从 library 书籍数量中减少。

两个表的所有行的计数都不会更新。相反,限制由 WHERE 关键字保留。

WHERE 关键字对行进行实际过滤。关键字在检查表中的条件后过滤行。

在这里,这个关键字表示 library_id 应该与 stu_book 表的 book_id 匹配。

输出将列出两个表中受影响的总行数的结果。下面是确认受影响的行数的输出。

Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

以下是上述查询在本地运行环境或命令提示符下的最终输出。

本地运行截图:

触发更新后的输出

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便