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

MySQL INSERT 與 UPDATE 語句深度解析:語法變體、多行插入、REPLACE、DELETE/TRUNCATE 對比

     編輯:MySQL 資料庫相關知識

SQL 更新操作包含 INSERT、UPDATE、DELETE,MySQL 另擴充 REPLACE、TRUNCATE TABLE。本文系統整理各語句語法變體、多行插入、衝突處理、型別轉換行為、返回值語義、權限模型等核心知識點。

INSERT — 插入新資料

語法一:標準 VALUES 形式

INSERT INTO tbl (col1, col2, ...) VALUES (val1, val2, ...);
  • 欄位清單可省略(需對應所有欄位且順序一致)。
  • VALUES() 為空 → 所有欄位用預設值。

語法二:SET 形式(MySQL 擴充)

INSERT INTO tbl SET col1=val1, col2=val2, ...;
  • 欄位值成對出現,可略過預設值欄位。
  • 至少需指定一個欄位。

多行插入(MySQL 擴充,高效能)

INSERT INTO tbl (col1, col2) VALUES (1,'a'), (2,'b'), (3,'c');
  • 單條語句插入多行,減少解析/優化/網路往返開銷。
  • 每行值必須用括號包裹,逗號分隔。
  • 錯誤寫法:VALUES(1,2,3,4,5) → Column count doesn't match value count。

型別轉換與邊界處理

  • 數值超出範圍 → 截斷至邊界值(如 TINYINT 插入 200 → 127)。
  • 字串過長 → 截斷(非嚴格模式)或報錯(嚴格模式)。
  • NOT NULL 欄位插入 NULL → 用預設值(數值 0、字串空串)。
  • TIMESTAMP 欄位:其他欄位更新時自動刷新(除非顯式指定)。

REPLACE — 衝突時刪舊插新

REPLACE INTO tbl (col1, col2) VALUES (1, 'new');
  • 表必須有 主鍵或唯一索引,且該欄位 NOT NULL,否則退化為 INSERT。
  • 衝突行:DELETE 舊行 + INSERT 新行,觸發 DELETE/INSERT 觸發器。
  • 返回影響行數:1=純插入,2=1刪+1插,>2=多唯一索引觸發多行刪除。
  • 支援 SET 語法與多行 VALUES。

UPDATE — 修改現有資料

UPDATE tbl SET col1=val1, col2=val2 WHERE condition;
  • 無 WHERE → 更新全表(極危險)。
  • 型別轉換規則同 INSERT。
  • 將欄位設為相同值 → 不更新,影響行數不計入。
  • 返回值:實際修改行數(非匹配行數)。JDBC/C API 可配置返回匹配行數。

DELETE vs TRUNCATE TABLE

特性DELETETRUNCATE TABLE
條件篩選WHERE 支援無,清空全表
返回行數實際刪除行數永遠 0
自增計數器保留(除非 WHERE 1 掃描全表)重置為 1
觸發器觸發 DELETE 觸發器不觸發
速度逐行刪除,較慢釋放數據頁,極快
回滾支援(事務中)不支援(隱含提交)
ORDER BY/LIMIT支援(MySQL 擴充)不支援

DELETE 進階用法

-- 刪除前 6 筆符合條件記錄
DELETE FROM users WHERE name='Mike' LIMIT 6;

-- 刪除最後 6 筆(按 ID 降序)
DELETE FROM users WHERE name='Mike' ORDER BY id DESC LIMIT 6;

-- 保留自增計數器(掃描全表,慎用大表)
DELETE FROM tbl WHERE 1;

權限模型對照

掌握更新語句的語法變體、返回值語義、型別轉換邊界、鎖行為差異,能編寫出高效、安全、可預測的資料操作程式碼。特別注意:UPDATE 無 WHERE 是災難、TRUNCATE 不可回滾、REPLACE 會觸發級聯刪除,生產環境操作前請三思並備份。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作所需權限
INSERTINSERT 權限
UPDATEUPDATE 權限
DELETEDELETE 權限
TRUNCATEDROP 權限(DDL 性質)
REPLACEINSERT + DELETE 權限