首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL UPDATE 語法詳解:單表、多表、修飾符與最佳實踐

     編輯:MySQL 綜合教學

MySQL UPDATE 語法詳解:單表、多表、修飾符與最佳實踐

單表 UPDATE

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col1=expr1 [, col2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

多表 UPDATE

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col1=expr1 [, col2=expr2 ...]
[WHERE where_definition]

支持 INNER JOIN、LEFT JOIN 等所有 JOIN 類型;不可使用 ORDER BY / LIMIT。

修飾符說明

  • LOW_PRIORITY:延遲執行直到無讀鎖
  • IGNORE:遇重複鍵衝突/數據轉換錯誤跳過該行繼續

核心行為

  • SET 從左到右求值:SET a=a*2, a=a+1 先乘後加
  • 更新為當前值不觸發寫入
  • NOT NULL 列設 NULL 會轉為默認值(數字 0、字符串 ''、日期零值)並產生警告
  • 返回實際改變行數;ROW_COUNT() / C API 可獲匹配/更新/警告數

實用範例

1. 簡單更新

UPDATE publishers SET city='Atlanta', state='GA';

2. 帶條件

UPDATE authors SET state='PC', city='Bay City'
WHERE state='CA' AND city='Oakland';

3. 關聯表更新(單表子查詢)

UPDATE titles
SET ytd_sales = (SELECT SUM(qty) FROM sales
                 WHERE sales.title_id = titles.title_id
                   AND sales.ord_date = (SELECT MAX(ord_date) FROM sales));

4. 多表 JOIN 更新

UPDATE items, month
SET items.price = month.price
WHERE items.id = month.id;

5. LIMIT 限制範圍

UPDATE authors SET state='ZZ'
WHERE au_id IN (SELECT au_id FROM authors ORDER BY au_lname LIMIT 10);

最佳實踐

  • 大批量更新分批 LIMIT 1000 避免長鎖表
  • 條件列加索引,EXPLAIN 確認走 ref/range
  • 避免在高併發表上不帶 WHERE 全表更新
  • InnoDB 外鍵場景優先用單表更新 + ON UPDATE CASCADE
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved