码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 干货 | 一条语句更新多个表


    众所周知,多个服务器命中会减慢应用程序的速度。出于这个原因,开发人员致力于找尋使用最少的语句更新数据的最有效方法。事实证明,SQL UPDATE 语句确实支持使用以下语法设置多个表的字段:

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

    语法是由组合两个或多个表的各种关键字组成,例如 join 关键字。

    今天的文章将概述多表 UPDATE 语句,以及使用 MySQL 8 和 Navicat Premium 16 作为示例。

    注意事项

    将两个表更新合并为一条语句并非没有限制和准则。请记住以下几点:

    • 在多表 UPDATE 查询中,每条满足条件的记录都会被更新。即使记录多次匹配条件,该行也只会更新一次。
    • 更新多个表的语法不能与 ORDER BY 和LIMIT 关键字一起使用。

    因此,虽然多表 UPDATE 语句非常有效,但它并不适用于所有情况。

    实际例子

    为了尝试使用多表 UPDATE 语句,我们将创建两个名为“library”和“book”的表,并设想一下从图书馆借了一本或多本书。这样做会同时增加和减少图书的数量。事实证明,这是将两个单独的语句合并为一个 UPDATE 查询的理想方案。这可以避免对服务器的单独调用,令操作更有效率。

    以下是每个表的定义和内容:

    library 表

    book 表

    以下的查询将更新两个表:

    UPDATE library l, book b
        SET l.book_count = l.book_count - 2,
            b.book_count = b.book_count + 2
    WHERE l.id = b.book_id
    AND b.id = '1AG';
    

    在上面的查询中,l.id = b.book_id 条件充当一个内部联接,将两个表结合在一起,并在检查表约束后对组合表进行操作。同时,b.id = '1AG' 条件进一步将目标行减少为与用户 '1AG' 相关的行。

    我们也可以使用其他联接类型,如外部联接和右外联接;唯一的弱点是分组的两个表必须具有相似或匹配的属性。

    与常规(单个表)UPDATE 语句一样,SET 关键字与 UPDATE 关键字会一起用于在现有行中设置新值。旧值会被新数据覆盖。我们可以在下面的 Navicat 中查看查询结果:

    正如预期的那样,用户 '1AG' 和图书 103 的计数已在两个表中更新:

    总结

    今天的文章概述了多表 UPDATE 语句,以及使用 MySQL 8 和 Navicat Premium 16 作为示例。我们学习到多表 UPDATE 语句最适合对相关表列应用数学运算,例如递增和递减。

     往期回顾 

    1. Navicat 荣获 Microsoft 金牌合作伙伴
    2. Navicat 16 正式支持 OceanBase 全线数据库产品
    3. Navicat 16 即将支持 Redis
    4. 免费试用 Navicat 16
    5. Navicat 的 20年发展史
    6. SQL 语句中 WHERE 1=1 的作用
    7. SQL 中计算总行数的百分比
    8. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
    9. 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件
  • 相关阅读:
    如果用nodejs开发一个网站
    缓存与数据库双写一致性问题解决方案
    基于MATLAB开发AUTOSAR软件应用层模块-part11.AUTOSAR Dictionary-2 mapping
    如何可视化编写和编排你的 K8s 任务
    十位时间戳转化成时间
    【ESP32_8266_WiFi (十三)】ESP8266自动配网 – WiFiManager库使用说明
    Uniapp导出的iOS应用上架详解
    基于“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用
    数据结构-学习-01-线性表之顺序表-初始化、销毁、清理、获取长度、判断为空、获取元素等实现
    111.(leaflet篇)leaflet椭圆采集
  • 原文地址:https://blog.csdn.net/weixin_53935287/article/details/128039408
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号