PostgreSQL - UPDATE 查詢:初學者的友好指南
你好啊,有志於數據庫的熱心者!今天,我們將要進入 PostgreSQL 的奇妙世界,並學習所有關於 UPDATE 查詢的知識。別擔心你對編程是新手——我會一步步地帶領你,就像我這些年來對無數學生所做的那樣。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們開始吧!
UPDATE 查詢是什麼?
在我們深入細節之前,讓我們先了解 UPDATE 查詢是關於什麼的。想像你有一本數字化的地址簿(這其實就是數據庫表)。現在,你的朋友搬到了一個新家。你會為他們創建一個全新的條目嗎?不會,你會簡單地更新他們的現有地址。這正是 PostgreSQL 中的 UPDATE 查詢所做的事情——它修改表中的現有數據。
UPDATE 查詢的語法
現在,讓我們看看 PostgreSQL 中 UPDATE 查詢的基本語法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
讓我們分解這個語法:
-
UPDATE table_name
:這指定了你想要更新的表。 -
SET column1 = value1, column2 = value2, ...
:這裡你指定想要改變哪些列以及你想設定的新值。 -
WHERE condition
:這非常關鍵!它決定了哪些行將被更新。如果你省略這個,表中所有的行都會被更新!
UPDATE 查詢的例子
示例 1:基本更新
假設我們有一個叫做 employees
的表,其中有 id
、name
和 salary
這些列。我們想給每個人加薪 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 的員工的薪水和職位。
最佳實踐和提示
-
總是使用 WHERE:除非你真的想更新每一行,否則總是包含 WHERE 子句。我曾經有一個學生意外地給公司裡的每個人付了 CEO 的薪水!
-
使用事务:對於重要的更新,將你的查詢包在一個事务中。這樣如果你出錯了,你可以回滾:
BEGIN;
UPDATE employees SET salary = salary * 2;
-- 哎呀!我們不是想要給每個人的薪水翻倍!
ROLLBACK;
- 先用 SELECT 測試:在運行 UPDATE 之前,先用 SELECT 查詢測試你的 WHERE 子句,以確保你正在 targeting 正確的行:
SELECT * FROM employees WHERE id < 1000;
-- 如果這看起來不錯,那麼運行:
UPDATE employees SET salary = salary * 1.1 WHERE id < 1000;
- 使用 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