当前位置: 首页 > news >正文

SQL关键字三分钟入门:UPDATE —— 修改数据

在数据库操作中,除了添加新记录外,我们还需要经常修改已有的记录。例如:

  • 更新用户的个人信息;
  • 调整订单的状态;
  • 更改产品的价格。

这时候就需要用到 SQL 中非常基础但极其重要的关键字 —— UPDATE

它是用来更新表中现有记录的核心命令,掌握它能让你轻松地对数据库中的数据进行维护和管理。


 什么是 UPDATE?

UPDATE 是 SQL 中用于更新表中已有记录的关键字语句。通过指定要更新的表、需要更改的字段以及相应的条件,你可以精确地修改数据库中的数据。

你可以把它理解为:“我要修改这张表里符合条件的数据”。


 基本语法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • table_name:你要更新的表。
  • SET:指定要更新的列及新的值。
  • WHERE(可选):限定哪些行将被更新;如果省略了 WHERE 子句,所有行都会被更新。

⚠️ 注意:忘记使用 WHERE 条件会导致整个表的所有记录都被更新,请务必小心。


 示例讲解

假设我们有一个 users 表,结构如下:

idnameagegendercreated_at
1张三202025-06-20
2李四222025-06-21
3王五212025-06-22

 示例1:更新单个字段

如果你想将用户“张三”的年龄改为21岁:

UPDATE users
SET age = 21
WHERE name = '张三';
结果:
idnameagegendercreated_at
1张三212025-06-20
2李四222025-06-21
3王五212025-06-22

 示例2:更新多个字段

如果你想同时更新用户“李四”的年龄和性别:

UPDATE users
SET age = 23, gender = '男'
WHERE name = '李四';
结果:
idnameagegendercreated_at
1张三212025-06-20
2李四232025-06-21
3王五212025-06-22

 示例3:结合子查询更新

假设你想要根据另一个表的信息来更新当前表的数据。比如,从 orders 表中获取每个客户的最新订单时间,并更新到 customers 表中:

UPDATE customers c
SET last_order_time = (SELECT MAX(order_date)FROM orders oWHERE o.customer_id = c.customer_id
);
这个例子说明了:
  • 如何利用子查询的结果作为更新的依据。
  • 对于每一个客户,找到其所有订单中最新的订单日期,并更新到 last_order_time 字段。

 示例4:更新所有行

如果你想要更新整个表中某一列的值,可以省略 WHERE 子句。例如,将所有用户的注册时间设置为今天:

UPDATE users
SET created_at = CURRENT_DATE;

⚠️ 提醒:此操作会更新表中的每一行,请谨慎使用。


使用建议

操作技巧使用建议
备份数据在执行大规模更新之前,建议先备份相关数据,以防误操作
使用事务对于关键数据的更新,最好放在事务中执行,以便出现问题时可以回滚
避免全表更新如果不需要更新所有记录,请务必加上 WHERE 子句
子查询限制当使用子查询作为更新来源时,确保子查询返回唯一结果,否则可能导致异常

 总结对比表

场景SQL 示例
更新单个字段UPDATE users SET age = 21 WHERE name = '张三';
更新多个字段UPDATE users SET age = 23, gender = '男' WHERE name = '李四';
结合子查询更新UPDATE customers SET field = (SELECT ...) WHERE condition;
更新所有行UPDATE users SET field = value;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/258800.html

相关文章:

  • C++ 快速回顾(一)
  • 覆盖迁移工具选型、增量同步策略与数据一致性校验
  • 用字符打印中文字“里”
  • 芸众商城系统部署教程 接口报错500 芸众商城队列安装启动教程
  • Javaweb - 5 事件的绑定
  • Sping AI接入deepseek
  • 微信小程序中 rpx与px的区别
  • 【FreeRTOS】FreeRTOS源码概述
  • HSA22HSA29美光固态芯片D8BJVC8BJW
  • 机器学习×第十三卷:集成学习上篇——她不再独断,而是召集小队贴贴你
  • 多线程的同步
  • k8s强制删除podpvpvc和nsnamespace
  • 人机交互动画制作新突破!文本驱动扩散框架HOIDiNi:一句话驱动虚拟人高精度操作物体。
  • GitHub Actions 的深度解析与概念介绍
  • Java8新特性_加强版
  • 采用ArcGIS10.8.2 进行插值图绘制
  • STM32MPU6050 dmp库
  • MyBatis-Plus:从入门到进阶
  • 如何将OBJ文件转成GLB文件
  • NVIDIA GPU架构学习笔记
  • 时序数据库IoTDB可实现的基本操作及命令汇总
  • Linux操作系统Nginx Web服务
  • 16、nrf52840蓝牙学习(唯一ID加密与解密)
  • VRRP:解决路由器单点故障的终极方案
  • wpa_supplicant连接到了路由,但是 udhcpc会分配到不同网段的ip,路由器ip为192.168.0网段,板子分配ip为192.168.1的网段
  • 2025.6.24总结
  • 数组题解——​合并区间【LeetCode】
  • Python 猜数字小游戏:Tkinter 实现的互动猜数挑战
  • json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig)
  • 【计算机组成原理01】:主存与Cache的地址映射