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

MySQL REPLACE INTO 深度解析:語法、權限與效能考量

     編輯:MySQL 資料庫相關知識

核心機制:DELETE + INSERT 的原子操作

REPLACE INTO 在主鍵或唯一索引衝突時,會先刪除舊行再插入新行。這意味著:

  • 觸發 DELETE 與 INSERT 觸發器
  • AUTO_INCREMENT 值可能重置
  • 外鍵關聯若為 ON DELETE CASCADE 會連帶刪除子表資料

語法完整指南

-- 形式一:VALUES 列表
REPLACE [LOW_PRIORITY | DELAYED] INTO tbl_name [(col_list)] VALUES (val_list),...;

-- 形式二:SET 子句
REPLACE [LOW_PRIORITY | DELAYED] INTO tbl_name SET col=val, ...;

-- 形式三:SELECT 查詢
REPLACE [LOW_PRIORITY | DELAYED] INTO tbl_name [(col_list)] SELECT ...;

權限需求與回傳值

執行需同時具備 INSERT 與 DELETE 權限。回傳受影響行數 = 刪除行數 + 插入行數:

  • 1:單純新增
  • >1:有舊資料被取代(可能一行取代多行)

效能陷阱與替代方案

場景建議
高併發寫入避免使用,鎖競爭劇烈;改用 INSERT ... ON DUPLICATE KEY UPDATE
批次匯入去重評估 LOAD DATA ... REPLACE 或臨時表 + INSERT IGNORE
需保留 AUTO_INCREMENT必須用 ON DUPLICATE KEY UPDATE

最佳實踐範例

-- 推薦:明確指定欄位,避免隱性 DEFAULT 值陷阱
REPLACE INTO users (id, email, name, updated_at)
VALUES (101, 'new@example.com', '新用戶', NOW());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved