博客
关于我
mysql 更新子表_mysql 在update中实现子查询的方式
阅读量:790 次
发布时间:2023-02-10

本文共 1421 字,大约阅读时间需要 4 分钟。

MySQL条件更新是数据库编程中常用的操作,但在实际操作中也存在一些容易出错的地方。以下将从基础到进阶详细讲解MySQL UPDATE语句的特点及使用方法。

MySQL条件更新的常见错误

首先,许多开发者在使用MySQL的UPDATE语句时会遇到一个常见错误:"You can't specify target table 'xxx' for update in FROM"。这种错误通常出现在子查询中同时更新当前表的情况下。

例如,以下代码会导致错误:

UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller)

MySQL UPDATE语句的特点

了解MySQL UPDATE语句的特点是避免在实际操作中遇到问题。以下是需要注意的几点:

  • 子查询在UPDATE中的限制

    在UPDATE语句中,子查询只能用于WHERE条件中的数据来源,而不能用于目标表的更新。也就是说,子查询不能同时用于设置字段值和更新当前表的记录。

  • 支持多表更新

    MySQL的UPDATE语句支持对多个表进行更新操作,这在其他数据库系统(如SQL Server)中是不可能的。比如,可以通过以下方式更新多个表:

  • UPDATE ta a, tb b SET a.Bid = b.id, b.Aid = a.id
    1. 允许在UPDATE后执行查询
      MySQL支持在UPDATE语句执行后立即执行查询操作,这类似于FROM子句的效果。这种特性可以用于复杂的数据处理场景。
    2. UPDATE语句的实际应用示例

      了解了上述特点后,接下来是几个实用的UPDATE语句示例。

      简单的更新示例

      UPDATE `roles_permissions` a SET a.roles_id = 89 WHERE a.`roles_name` = '0|||管理员'

      复杂的更新示例

      示例1
      UPDATE order_mall a     , (SELECT order_mall.id FROM `order_mall`, `order_goods`        WHERE order_mall.`id` = order_goods.`order_id`        AND order_goods.order_status = 8        AND order_goods.order_goods_type = 3) bSET a.`status` = 4WHERE a.id = b.id
      示例2
      UPDATE `core_user` a     , (SELECT message_push_conf.user_id, message_push_conf.`open_push`        FROM `message_push_conf`) bSET a.`switch_push` = b.open_pushWHERE a.id = b.user_id
      示例3
      UPDATE encrypt_user e , user_auth_base u SET     account_cid_md5 = MD5(CONCAT(e.account, UPPER(u.id_number)))WHERE e.user_id = u.user_id

      这些示例展示了如何在不同场景下灵活运用MySQL的UPDATE语句特性。

    转载地址:http://mybfk.baihongyu.com/

    你可能感兴趣的文章
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>