PostgreSQL - UPDATE 查询:初学者的友好指南

你好,有抱负的数据库爱好者!今天,我们将深入 PostgreSQL 的奇妙世界,学习关于 UPDATE 查询的一切。如果你是编程新手,不用担心——我会一步一步地引导你,就像我多年来为无数学生所做的那样。所以,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们开始吧!

PostgreSQL - Update Query

什么是 UPDATE 查询?

在我们深入了解之前,先来了解一下 UPDATE 查询是什么。想象你有一个数字地址簿(这本质上就是数据库表)。现在,你的朋友搬到了新家。你不会为他们创建一个全新的条目,对吧?你会简单更新他们的现有地址。这正是 PostgreSQL 中的 UPDATE 查询所做的——它修改表中的现有数据。

UPDATE 查询的语法

现在,让我们来看看 PostgreSQL 中 UPDATE 查询的基本语法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

让我们分解一下:

  1. UPDATE table_name:这指定了你想要更新的表。
  2. SET column1 = value1, column2 = value2, ...:这里指定了你想要更改哪些列以及设置哪些新值。
  3. WHERE condition:这是至关重要的!它决定了哪些行将被更新。如果你省略它,表中的所有行都会被更新!

UPDATE 查询的示例

示例 1:基本更新

假设我们有一个名为 employees 的表,其中包含 idnamesalary 列。我们想要给每个人都加薪 10%。下面是如何操作的:

UPDATE employees
SET salary = salary * 1.1;

这个查询将每个人的薪水提高 10%。注意我们没有使用 WHERE 子句,所以它影响所有行。

示例 2:带条件的更新

现在,假设我们只想给 ID 小于 1000 的员工加薪:

UPDATE employees
SET salary = salary * 1.1
WHERE id < 1000;

这个查询只会更新 ID 小于 1000 的员工的薪水。

示例 3:更新多个列

有时,你可能想要一次更新多个列。假设我们想要为特定员工更新薪水和职位:

UPDATE employees
SET salary = 75000, job_title = '高级开发者'
WHERE id = 1234;

这个查询更新了 ID 为 1234 的员工的薪水和职位。

最佳实践和技巧

  1. 始终使用 WHERE:除非你真的想更新每一行,否则始终包含 WHERE 子句。我曾经有一个学生,他不小心把公司的每个人都设置成了 CEO 的薪水!

  2. 使用事务:对于重要的更新,将你的查询包装在事务中。这样如果出了问题,你可以回滚:

BEGIN;
UPDATE employees SET salary = salary * 2;
-- 哦哦!我们并不想给每个人的薪水翻倍!
ROLLBACK;
  1. 先用 SELECT 测试:在运行 UPDATE 之前,用 SELECT 查询测试你的 WHERE 条件,以确保你定位到了正确的行:
SELECT * FROM employees WHERE id < 1000;
-- 如果这看起来不错,那么运行:
UPDATE employees SET salary = salary * 1.1 WHERE id < 1000;
  1. 使用 RETURNING:PostgreSQL 有一个很棒的功能,可以让你看到更新了什么:
UPDATE employees
SET salary = salary * 1.1
WHERE id = 1234
RETURNING id, name, salary;

这将显示更新后的行,这对于验证非常有帮助。

常见的 UPDATE 方法

以下是在 PostgreSQL 中常见的一些 UPDATE 方法,以 Markdown 表格格式呈现:

方法 描述 示例
基本更新 更新满足条件或所有行的指定列 UPDATE employees SET salary = 50000 WHERE department = 'IT'
带计算的更新 根据当前值更新列 UPDATE products SET price = price * 1.1
带子查询的更新 使用子查询确定哪些行要更新或设置哪些值 UPDATE orders SET status = '已发货' WHERE id IN (SELECT order_id FROM shipments WHERE ship_date = CURRENT_DATE)
带 JOIN 的更新 基于另一表的数据进行更新 UPDATE employees e SET salary = e.salary * 1.1 FROM departments d WHERE e.dept_id = d.id AND d.name = '销售'
带 CASE 的更新 允许在更新中使用条件逻辑 UPDATE employees SET bonus = CASE WHEN sales > 10000 THEN 1000 ELSE 500 END

记住,每种方法都有其用途,随着你对 PostgreSQL 的熟练度提高,你会对何时使用每种方法产生直觉。

结论

好了,各位!你们已经迈出了进入 PostgreSQL 中 UPDATE 查询世界的第一步。记住,能力越大,责任越大——在按下执行按钮之前,请务必仔细检查你的 WHERE 子句!

熟能生巧,所以不要害怕设置一个测试数据库并亲自尝试这些查询。在你意识到之前,你将能够像专业人士一样更新数据!

愉快地查询,愿你的数据库永远井井有条!

Credits: Image by storyset