SQL更新教學:輕鬆掌握UPDATE語法

作者:帆軟行業化團隊

2025年7月01日 · 12 min read

來源:帆軟
SQL Update
Image Source: pexels

你想快速修改資料表內容嗎?SQL更新語句就是你的好幫手。不過你一定要記住,WHERE子句不能省略。很多人因為忘記加WHERE,結果把整張表格的數據都改掉了。像有些案例裡,原本只想改特定id,卻因為漏掉WHERE,所有欄位都變成預設值,這真的很危險。SQL更新的核心,就是精確控制你要改哪些資料。只要小心操作,你就能輕鬆搞定資料更新!

核心要點

  • 寫UPDATE語句時,務必加上WHERE條件,避免誤改整張資料表。
  • SET子句可同時更新多個欄位,靈活處理資料修改需求。
  • 使用AND、OR組合條件,讓更新更精確且符合需求。
  • 執行更新前,先用SELECT測試條件,確保只改想改的資料。
  • 進階用法如JOIN和子查詢能跨表更新,提升操作效率與彈性。

SQL更新語法

SQL更新語法
SQL更新語法

基本結構

你想學會怎麼用SQL更新資料嗎?其實很簡單,只要記住一個標準格式就行。你只需要這樣寫:

UPDATE 資料表名稱 SET 欄位1=值1, 欄位2=值2 WHERE 條件;

這個語法很常見。你會先指定要更新哪個資料表,然後用SET設定要改哪些欄位,最後用WHERE告訴資料庫要改哪幾筆資料。很多教學網站都會用這個格式來說明SQL更新,還會舉例像是「根據姓名去改電話號碼」。你只要照這個結構寫,就能輕鬆完成資料修改。

SET與WHERE

SET子句就是你要改的內容。你可以一次改一個欄位,也可以同時改好幾個欄位。舉個例子:

UPDATE users SET phone='0912345678' WHERE name='小明';

這樣你就把名字是小明的那一筆資料,電話號碼改掉了。你一定要記得加WHERE,這是SQL更新最重要的地方。如果你忘了加WHERE,像這樣:

UPDATE users SET phone='0912345678';

這時候,整個users資料表的phone欄位都會被改成同一個號碼。這種錯誤很常發生,很多人一不小心就把整張表都改壞了。所以你每次寫SQL更新時,都要特別檢查WHERE子句有沒有寫對。 小提醒:你可以先用SELECT語句測試WHERE條件,確定只會選到你要改的資料,再執行SQL更新,這樣會更安全。

條件組合

有時候,你想要根據多個條件來更新資料。這時你可以用AND或OR來組合條件。舉例來說:

UPDATE users SET status='active' WHERE age > 18 AND city='台北';

這樣只有年齡大於18歲而且住在台北的使用者,才會被更新。你也可以用OR:

UPDATE users SET status='inactive' WHERE age < 18 OR city='高雄';

這時只要年齡小於18歲,或是住在高雄的使用者,都會被更新。你可以自由組合條件,讓SQL更新更精確。

有些資料庫對SQL更新語法有細微差異,但大部分都支援這些基本用法。如果你要根據主鍵(像是id)來更新,會更安全,因為主鍵通常不會重複。你只要記得善用AND、OR和主鍵條件,就能避免誤改資料。

欄位更新

單欄更新

你常常只想改一個欄位嗎?這種情況很常見。你只要用SET後面接一個欄位名稱,就能輕鬆完成單欄位的SQL更新。來看個例子:

UPDATE products SET price = 199 WHERE id = 1;

這樣你就把id是1的商品價格改成199了。是不是很簡單?
有時候,你會想把某個欄位的值清空,這時可以用NULL。像這樣:

UPDATE users SET email = NULL WHERE username = 'amy';

這樣你就把amy的email設成空值。
如果你想處理字串內容,也可以直接用SET。例如你想把名字改成大寫:

UPDATE users SET name = UPPER(name) WHERE id = 5;

這樣id是5的使用者,名字就會變成大寫。

小提醒:有些資料庫支援字串函數(像UPPER、LOWER),你可以查查自己的資料庫有沒有這些功能。

多欄更新

有時候,你會想一次改好幾個欄位。這時候SET後面可以用逗號分隔多個欄位。來看個範例:

UPDATE users SET phone = '0987654321', city = '台中' WHERE id = 2;

這樣你就同時把id是2的使用者電話和城市都改掉了。
你也可以搭配字串處理函數。例如你想把所有住在台北的使用者,城市名稱都加上「市」這個字:

UPDATE users SET city = CONCAT(city, '市') WHERE city = '台北';

這樣city欄位就會從「台北」變成「台北市」。
有時候你想把某個字串內容換掉,可以用REPLACE函數。例如你想把所有email裡的「.tw」換成「.com」:

UPDATE users SET email = REPLACE(email, '.tw', '.com') WHERE email LIKE '%.tw';

這樣所有email結尾是.tw的使用者,信箱都會自動換成.com。

小技巧:多欄位更新時,記得每個欄位都要用逗號分開,最後不要多加逗號。

你可以用這些方法,讓SQL更新變得更靈活。不管是單欄還是多欄,只要掌握語法,你就能快速處理各種資料修改需求。

進階SQL更新

JOIN更新

你想過要同時更新多個資料表嗎?這時候JOIN更新就派上用場了。你可以用UPDATE ... FROM ... JOIN語法,根據一個表的資料去更新另一個表。像是你要根據訂單數量去調整庫存,這種跨表操作很常見。
不同資料庫對JOIN更新的支援不太一樣。例如Azure Synapse Analytics早期版本不支援MERGE語法,這時你就要用UPDATE搭配JOIN來達成。MERGE語句可以同時做INSERT、UPDATE、DELETE,效率很高,特別適合大量資料的ETL作業。不過你要注意,JOIN條件只放比對欄位,這樣效能才會好。

小提醒:在JOIN欄位建立索引,能大幅提升更新速度。
有時候MERGE會遇到錯誤,像是目標表是HASH分散式又有非叢集索引,這時建議改用傳統UPDATE語法。

子查詢

你有沒有遇過要根據另一個查詢結果來更新資料?這時子查詢就很實用。你可以在SET或WHERE裡用子查詢,讓SQL自動抓取最新資料。例如:

UPDATE products SET stock = 
  (SELECT SUM(quantity) FROM orders WHERE orders.product_id = products.id)
WHERE id = 10;

這樣就能把id為10的商品庫存,直接更新成所有訂單的數量總和。
你想讓這類查詢更快嗎?記得定期更新統計資料。SQL Server會根據最新統計資料來優化查詢計劃,提升執行效率。你可以UPDATE STATISTICSsp_updatestats來手動更新。不過更新太頻繁會讓查詢重新編譯,可能影響效能,所以要根據實際需求調整。

 注意:執行這些指令需要有ALTER權限或資料庫管理權限。

ORDER BY與LIMIT

你想只更新部分資料,或是控制更新順序嗎?這時ORDER BY和LIMIT就很有用。MySQL支援在UPDATE語句裡加上ORDER BY和LIMIT,讓你可以指定先更新哪些資料,或只更新前幾筆。例如:

UPDATE users SET status = 'inactive' ORDER BY last_login LIMIT 5;

這樣你就能把最後登入時間最久遠的五位使用者狀態改成inactive。
很多資料庫管理書籍都有詳細介紹這些語法和效能優化方法,像《MySQL資料庫管理實戰》《MySQL技術大全》《劍指 MySQL》。這些書會教你怎麼用ORDER BY和LIMIT做分頁查詢、排序優化,還有實際的效能測試數據。

小技巧:ORDER BY和LIMIT能幫你分批處理大量資料,減少單次更新壓力,也方便你做批次維護。

安全與錯誤排除

安全與錯誤排除
安全與錯誤排除

SELECT驗證

你在執行SQL更新前,最好先用SELECT語句測試一下WHERE條件。這個步驟可以幫你確認只會影響到你想要的資料。很多公司都會建立多個使用者帳號,並設定不同的查詢權限。像銀行會讓員工只能看到自己部門的資料,醫院也會讓護士只能查詢自己負責的病患。這些安全性原則可以大大降低誤更新的風險。你只要在更新前先跑一遍SELECT,看到的結果就是即將被修改的資料,這樣就能安心執行SQL更新。

 小提醒:有些系統會自動過濾掉你沒權限的資料列,這樣就算你下錯條件,也不會誤改到別人的資料。

避免全表更新

你一定要記得,SQL更新時如果忘了加WHERE,整個資料表都會被改掉。這種錯誤很常見,尤其在新手或趕時間時最容易發生。你可以養成一個好習慣:每次寫UPDATE語句時,先用SELECT語句測試條件,確定沒問題再執行。很多企業也會設定安全性原則,像是只讓特定角色有UPDATE權限,或是用安全性函式自動篩選資料。這些做法都能幫你避免全表更新的災難。

常見錯誤

你在操作SQL更新時,可能會遇到各種錯誤訊息。以下是常見的錯誤與排除方法:

  1. 連線錯誤(如「SQL Server不存在或拒絕存取」、「Windows錯誤233」):檢查伺服器設定,確認協定有啟用,並用SQLCHECK工具收集診斷資訊。
  2. 使用者登入失敗(錯誤18456):檢查帳號密碼,並確認權限設定正確。
  3. 資料庫損毀或異常:可以用DBCC CHECKDB指令修復,或從備份還原資料
  4. 安裝或升級失敗(如錯誤912、3417):查看安裝日誌,根據錯誤代碼查找解決方法。

微軟官方文件和許多技術文章都會列出這些錯誤訊息,還有詳細的排除步驟和案例。你可以參考這些資源,快速找到解決辦法。

你學會SQL更新語法後,記得每次都要仔細檢查WHERE條件,這樣才能避免誤改資料。多用SELECT驗證,遇到問題時可以用SQL Profiler追蹤執行情況,像資料型態不符就會導致更新失敗。建議你採用循環學習法,反覆練習題目並比對預期結果,這樣才能真正掌握正確觀念。持續練習,你會越來越熟練!

FAQ

1. 我可以一次更新多筆資料嗎?

當然可以!你只要在 WHERE 子句裡設定條件,符合條件的所有資料都會被一起更新。

 

2. 忘記加 WHERE 怎麼辦?

你如果沒加 WHERE,整個資料表都會被改掉。建議你馬上還原備份,避免資料損失。

 

3. UPDATE 可以用在多個資料表嗎?

你可以用 JOIN 或子查詢來跨表更新。不過,不是每個資料庫都支援這種寫法,記得先查官方文件。

 

4. 如何避免誤更新?

你可以先用 SELECT 測試條件,確定結果正確再執行 UPDATE。這樣會更安全!

 

5. UPDATE 支援哪些資料型態?

UPDATE 幾乎支援所有常見資料型態。你可以更新文字、數字、日期,甚至 NULL 值都沒問題。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容