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

MySQL UPDATE 語法全解析:單表、多表、修飾符、限制條件與最佳實踐

     編輯:MySQL 資料庫相關知識

語法速查

單表更新

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

多表更新

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

關鍵修飾符

修飾符行為
LOW_PRIORITY延遲執行,直到無其他客戶端讀取該表
IGNORE遇錯誤(如主鍵衝突、類型轉換溢出)不中斷,跳過該行

賦值順序與陷阱

  • 左到右求值:SET a=a*2, a=a+1 先乘後加;
  • 若新值與舊值相同,MySQL 不更新(無觸發器觸發);
  • NOT NULL 列設為 NULL 會轉為類型默認值(數字 0、字符串 ''、日期零值)並產生警告。

返回值與 API

  • 返回實際改變行數(非匹配行數);
  • mysql_info() / ROW_COUNT() 可獲取匹配行、更新行、警告數。

LIMIT 與 ORDER BY 限制

  • LIMIT N:匹配到 N 行即停止,無論是否改變;
  • ORDER BY:按指定順序更新,常用於配合 LIMIT 實現「更新前 N 行」;
  • 多表 UPDATE 禁止使用 ORDER BY / LIMIT。

多表更新權限與外鍵陷阱

  • 被修改列需 UPDATE 權限,僅讀取列需 SELECT 權限;
  • 涉及外鍵的 InnoDB 多表更新,優化器處理順序可能違反父子關係導致報錯回滾 → 建議單表更新 + 依賴 ON UPDATE CASCADE。

子查詢限制

當前版本不支持在子查詢中更新同一張表:UPDATE t SET ... WHERE id IN (SELECT ... FROM t) 會報錯。

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