在数据库操作中,除了添加新记录外,我们还需要经常修改已有的记录。例如:
- 更新用户的个人信息;
- 调整订单的状态;
- 更改产品的价格。
这时候就需要用到 SQL 中非常基础但极其重要的关键字 —— UPDATE
!
它是用来更新表中现有记录的核心命令,掌握它能让你轻松地对数据库中的数据进行维护和管理。
什么是 UPDATE?
UPDATE
是 SQL 中用于更新表中已有记录的关键字语句。通过指定要更新的表、需要更改的字段以及相应的条件,你可以精确地修改数据库中的数据。
你可以把它理解为:“我要修改这张表里符合条件的数据”。
基本语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
table_name
:你要更新的表。SET
:指定要更新的列及新的值。WHERE
(可选):限定哪些行将被更新;如果省略了WHERE
子句,所有行都会被更新。
⚠️ 注意:忘记使用
WHERE
条件会导致整个表的所有记录都被更新,请务必小心。
示例讲解
假设我们有一个 users
表,结构如下:
id | name | age | gender | created_at |
---|---|---|---|---|
1 | 张三 | 20 | 男 | 2025-06-20 |
2 | 李四 | 22 | 女 | 2025-06-21 |
3 | 王五 | 21 | 男 | 2025-06-22 |
示例1:更新单个字段
如果你想将用户“张三”的年龄改为21岁:
UPDATE users
SET age = 21
WHERE name = '张三';
结果:
id | name | age | gender | created_at |
---|---|---|---|---|
1 | 张三 | 21 | 男 | 2025-06-20 |
2 | 李四 | 22 | 女 | 2025-06-21 |
3 | 王五 | 21 | 男 | 2025-06-22 |
示例2:更新多个字段
如果你想同时更新用户“李四”的年龄和性别:
UPDATE users
SET age = 23, gender = '男'
WHERE name = '李四';
结果:
id | name | age | gender | created_at |
---|---|---|---|---|
1 | 张三 | 21 | 男 | 2025-06-20 |
2 | 李四 | 23 | 男 | 2025-06-21 |
3 | 王五 | 21 | 男 | 2025-06-22 |
示例3:结合子查询更新
假设你想要根据另一个表的信息来更新当前表的数据。比如,从 orders
表中获取每个客户的最新订单时间,并更新到 customers
表中:
UPDATE customers c
SET last_order_time = (
SELECT MAX(order_date)
FROM orders o
WHERE 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; |