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

MySQL UPDATE語句深度解析(二):類型轉換、無效更新、與REPLACE/DELETE差異

     編輯:MySQL 資料庫相關知識

類型轉換與截斷規則

  • 值類型不匹配 → **隱式轉換**為目標列類型
  • 數值超範圍 → 截取為該類型**最大/最小值**
  • 字符串過長 → **截斷**多餘字符
  • 非空列設NULL → 填入**默認值**(數字0、字串空串''而非NULL)

兩種「無影響行」場景

  1. WHERE條件**無匹配行**
  2. 新值**等於原值**(如SET abc='123' WHERE abc='123')

返回Query OK, 0 rows affected,不報錯。

返回值語義

  • 受影響行數=**真正被修改的行數**(不含匹配但未修改的行)
  • 若需**匹配行數**,需用C APImysql_options(MYSQL_REPORT_DATA_TRUNCATION)或JDBCuseAffectedRows=false

TIMESTAMP自動更新陷阱

含TIMESTAMP列的表,**任意列更新**均觸發該列自動刷新為當前時間(除非顯式SET ts=ts)。

UPDATE vs REPLACE 核心差異

DELETE vs TRUNCATE TABLE

維度UPDATEREPLACE
無匹配行無操作插入新行
有匹配/衝突部分列更新**刪除舊行+插入新行**(全列覆蓋)
主鍵/唯一索引無要求**必須有且不允許NULL**

MySQL增強:DELETE支援ORDER BY + LIMIT

-- 刪除name='Mike'的前6條(按id倒序)
DELETE FROM users WHERE name='Mike' ORDER BY id DESC LIMIT 6;

精確控制刪除範圍,標準SQL不支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性DELETETRUNCATE TABLE
可帶WHERE是否(全表清空)
返回刪除行數是否(返回0)
速度慢(逐行/索引)極快(Drop+重建)
自增列重置否(除非WHERE 1全掃)**是,歸1**
觸發器觸發**不觸發**