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 = 'Senior Developer'
WHERE id = 1234;

這個查詢會更新 ID 為 1234 的員工的薪水和職位。

最佳實踐和提示

  1. 總是使用 WHERE:除非你真的想更新每一行,否則總是包含 WHERE 子句。我曾經有一個學生意外地給公司裡的每個人付了 CEO 的薪水!

  2. 使用事务:對於重要的更新,將你的查詢包在一個事务中。這樣如果你出錯了,你可以回滾:

BEGIN;
UPDATE employees SET salary = salary * 2;
-- 哎呀!我們不是想要給每個人的薪水翻倍!
ROLLBACK;
  1. 先用 SELECT 測試:在運行 UPDATE 之前,先用 SELECT 查詢測試你的 WHERE 子句,以確保你正在 targeting 正確的行:
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 更新所有行或符合條件的行的指定列 UPDATE employees SET salary = 50000 WHERE department = 'IT'
带计算的 UPDATE 根据当前值更新列 UPDATE products SET price = price * 1.1
带子查询的 UPDATE 使用子查询来确定哪些行要更新或设置哪些值 UPDATE orders SET status = 'shipped' WHERE id IN (SELECT order_id FROM shipments WHERE ship_date = CURRENT_DATE)
带连接的 UPDATE 根据另一表的数据更新 UPDATE employees e SET salary = e.salary * 1.1 FROM departments d WHERE e.dept_id = d.id AND d.name = 'Sales'
带 CASE 的 UPDATE 在更新中允许条件逻辑 UPDATE employees SET bonus = CASE WHEN sales > 10000 THEN 1000 ELSE 500 END

記住,每一種方法都有其用途,當你對 PostgreSQL 越来越熟悉時,你會逐漸了解何時使用每一種方法。

結論

好了,各位!你剛剛踏入了 PostgreSQL 中 UPDATE 查詢的世界。記住,能力越大,責任越大——在點擊執行按鈕之前,總是雙重檢查你的 WHERE 子句!

實踐使人完美,所以不要害怕建立一個測試數據庫並自己嘗試這些查詢。在你意識到之前,你會像專家一樣更新數據!

祝你查詢愉快,願你的數據庫永遠井井有條!

Credits: Image by storyset