在 MySQL 中使用一个查询更新多个表
在某些情况下,用户想要同时更新逻辑相关的表。这些逻辑相关的表通过一些属性相互链接。
MySQL 一次查询更新多张表的优点
表中的类似属性用于创建更新查询。更新查询根据条件在不同的表中执行多行更新。
当出现类似情况时,适合多个表更新查询。使用这种多表更新查询的好处是:
- 这会导致一次更新行,而不是在每个表中进行单独更新。
- 这也减少了更新不同表中条目的总时间。
- 这减少了表中不一致更新的机会。
- 在任何给定时间,所有表格的类似响应。
在 MySQL 中使用 UPDATE
关键字通过一个查询更新多个表
在多表更新查询中,每条满足条件的记录都会被更新。即使条件匹配多次,该行也只会更新一次。
更新多个表的语法不能与 ORDER BY
和 LIMIT
关键字一起使用。
UPDATE
关键字的语法:
UPDATE table1, table2, ...
SET column1 = value1,
column2 = value2,
...
[WHERE conditions]
多重更新不是 MySQL 语言中存在的组合关键字。语法是由有助于对两个或多个表进行分组的各种关键字的组合形成的,例如 join
关键字。
连接类型用于进行单个查询以一次更新多个表。让我们通过一次更新多个表来理解这一点。
考虑两个名为 library
和 stu_book
的表。并考虑一本书从图书馆发给学生的情况。
图书馆的图书数量减少了,而有学生的图书数量增加了。这就是需要两个单独调用的场景。
为了避免 RDBMS 表中的单独更新,我们使用单个查询更新两个表中的行。以下是更新调用之前要执行的语句列表。
在对表进行实际查询之前的查询列表:
-
创建两个名为
library
和stu_book
的实体。 -
两者的架构共享如下:
-
分别在表格中插入一些常用值,如下所示。
-
尝试通过在两个表中同时增加或减少来实现用例。
查询执行 MySQL 语句:
UPDATElibraryl,stu_booksSETl.book_count=l.book_count-2,s.book_count=s.book_count+2WHEREl.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
以下是上述查询在本地运行环境或命令提示符下的最终输出。
本地运行截图: