首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL UPDATE 修改語句完整指南與實戰技巧

     編輯:MySQL 資料庫相關知識

基本語法

UPDATE table_name
SET column_name1 = new_value1, column_name2 = new_value2, ...
WHERE condition;
  • SET 子句指定要修改的欄位與新值,多欄位用逗號分隔。
  • WHERE 為可選,省略時會更新全表所有行,極度危險!

實戰範例

MySQL> USE tpsc;
MySQL> UPDATE tpsc SET tpmc = 'aaa' WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Rows matched 符合條件行數,Changed 實際值改變行數(若新值等於舊值則不計入)。

進階用法與優化

1. 多表聯合更新

UPDATE t1
JOIN t2 ON t1.id = t2.t1_id
SET t1.status = 'processed', t2.updated_at = NOW()
WHERE t1.created_at < '2023-01-01';

2. 子查詢賦值

UPDATE products
SET price = (SELECT AVG(price) FROM products WHERE category_id = products.category_id)
WHERE price IS NULL;

3. 避免全表掃描鎖表

  • WHERE 條件務必命中索引。
  • 大批量更新分批次執行(如每批 1000 行),配合 LIMIT 或主鍵範圍。
  • 使用 pt-archiver 或自寫腳本分塊更新,減少鎖持有時間。

常見錯誤與避坑

錯誤後果修正
漏寫 WHERE全表資料被覆蓋養成「先 SELECT 驗證條件」習慣
字串未加引號語法錯誤或隱式轉換導致全表掃描嚴格使用單引號包裹字串常量
更新大欄位(BLOB/TEXT)產生大量 Undo Log、Redo Log拆分到獨立表、或僅更新必要欄位

事務控制

重要更新務必包裹在事務中:

START TRANSACTION;
UPDATE ... WHERE ...;
UPDATE ... WHERE ...;
COMMIT; -- 或 ROLLBACK;

配合 ROW_COUNT() 檢查影響行數,決定提交或回滾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved