Appearance
数据修改
使用 UPDATE 命令修改数据
在数据库操作中,我们经常需要更新已存储的数据。PostgreSQL 提供了强大的 UPDATE
命令来完成这一任务。本节将通过实例讲解如何使用 UPDATE
命令来修改表中的数据。
UPDATE 命令基础语法
基本语法
sql
UPDATE 表名
SET 列名1 = 值1, 列名2 = 值2, ...
WHERE 条件;
如果省略 `WHERE` 子句,表中的所有行都将被更新!请务必小心使用。
实际应用案例
假设我们有一个名为 weather
的天气数据表,由于测量仪器校准问题,我们发现 1994 年 11 月 28 日之后的所有温度读数都偏高了 2 度。我们需要将这些数据进行更正。
步骤 1: 查看原始数据
首先,让我们看一下更新前的数据:
sql
SELECT * FROM weather;
原始数据可能如下:
city | temp_lo | temp_hi | prcp | date |
---|---|---|---|---|
San Francisco | 46 | 52 | 0.25 | 1994-11-27 |
San Francisco | 43 | 57 | 0 | 1994-11-29 |
Hayward | 37 | 54 | null | 1994-11-29 |
步骤 2: 执行更新操作
现在,让我们使用 UPDATE
命令修正数据:
sql
UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '1994-11-28';
这条命令的作用是:
- 选择
weather
表中所有日期晚于 1994-11-28 的记录 - 将这些记录的
temp_hi
和temp_lo
字段各减去 2 度
TIP
计算表达式注意我们可以在 SET
子句中使用表达式,如 temp_hi - 2
,而不仅仅是常量值。
步骤 3: 验证更新结果
执行更新后,我们可以再次查询表格数据来验证更改:
sql
SELECT * FROM weather;
更新后的数据:
city | temp_lo | temp_hi | prcp | date |
---|---|---|---|---|
San Francisco | 46 | 50 | 0.25 | 1994-11-27 |
San Francisco | 41 | 55 | 0 | 1994-11-29 |
Hayward | 35 | 52 | null | 1994-11-29 |
从结果可以看到,只有 11 月 28 日之后的数据被更新了,而 11 月 27 日的数据保持不变。
UPDATE 命令的高级用法
更新多个字段
如示例所示,我们可以在一个 UPDATE
语句中同时更新多个字段:
sql
UPDATE 表名
SET 列名1 = 值1,
列名2 = 值2,
列名3 = 值3
WHERE 条件;
sql
UPDATE employees
SET salary = salary * 1.1,
last_updated = CURRENT_TIMESTAMP,
status = 'active'
WHERE department = 'Sales';
使用子查询更新
我们也可以使用子查询的结果来更新表:
sql
UPDATE products
SET price = price * 1.1
WHERE category_id IN (SELECT id FROM categories WHERE name = 'Electronics');
大规模数据更新可能会导致性能问题或锁定问题。对于大型表的更新操作,考虑在低峰期执行或分批处理。
返回更新的数据
在 PostgreSQL 中,我们可以使用 RETURNING
子句来返回被更新的行:
sql
UPDATE accounts
SET balance = balance - 100.00
WHERE name = 'Alice'
RETURNING account_no, name, balance;
小结
UPDATE
命令用于修改表中已存在的数据- 使用
WHERE
子句限定要更新的行,避免不必要的全表更新 - 可以同时更新多个字段,也可以使用表达式计算新值
- 可以结合子查询进行更复杂的更新操作
RETURNING
子句可以返回已更新的数据