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

MySQL 插入忽略重複數據:REPLACE vs INSERT IGNORE 對比

     編輯:MySQL 資料庫相關知識

MySQL 避免重複插入的兩大方案:REPLACE INTO vs INSERT IGNORE

前提條件

目標表**必須有主鍵或唯一索引**,否則無法判定重複。

方案一:REPLACE INTO


REPLACE [LOW_PRIORITY | DELAYED] INTO tbl_name [(col_list)]
VALUES (val_list), ...;

-- 或
REPLACE INTO tbl_name SET col1=val1, col2=val2, ...;

-- 或
REPLACE INTO tbl_name SELECT ...;
  • 語義:**DELETE 舊行 + INSERT 新行**
  • 重複判定:主鍵/唯一鍵衝突
  • 缺失欄位 → 重置為預設值
  • 自增 ID → 重新分配(變化)

方案二:INSERT IGNORE INTO


INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
INTO tbl_name [(col_list)]
VALUES (val_list), ...;
  • 語義:**衝突時靜默跳過**,不報錯、不更新
  • 保留舊行所有欄位值
  • 自增 ID 不變
  • **效能優於 REPLACE**(無刪除操作)

核心差異對比

特性REPLACE INTOINSERT IGNORE
衝突處理刪除舊行、插入新行保留舊行、忽略新行
未指定欄位重置為預設值保持舊值
自增 ID改變不變
觸發器觸發 DELETE + INSERT不觸發
效能較慢較快

選擇建議

  • **需更新現有行** → INSERT ... ON DUPLICATE KEY UPDATE(另一文章詳述)
  • **全行覆蓋、接受 ID 變化** → REPLACE INTO
  • **僅避免報錯、保留舊數據** → INSERT IGNORE(推薦)
  • 批量導入首選 LOAD DATA ... IGNORE 或 REPLACE
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved