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

MySQL REPLACE INTO vs INSERT INTO 差異深度解析:算法、權限、返回值、語法

     編輯:MySQL 資料庫相關知識

核心差異

REPLACE = DELETE(若主鍵/唯一鍵衝突)+ INSERT。
前提:表必須有 PRIMARY KEY 或 UNIQUE 索引,否則退化為普通 INSERT。

執行算法

  1. 嘗試插入新行
  2. 若主鍵/唯一鍵衝突報錯:
    1. 刪除衝突行
    2. 再次插入新行

若多個唯一索引同時衝突,可能一次 REPLACE 刪除多行舊數據。

返回值含義

  • 1:純插入,無刪除
  • >1:刪除 N 行 + 插入 1 行,總影響行數 = N+1

PHP 可用 mysql_affected_rows() 獲取。

權限要求

需同時具備表的 INSERT 和 DELETE 權限。

語法格式

REPLACE [LOW_PRIORITY|DELAYED] [INTO] tbl [(col,...)] VALUES (...),(...),...;
REPLACE [LOW_PRIORITY|DELAYED] [INTO] tbl SET col=expr, ...;
REPLACE [LOW_PRIORITY|DELAYED] [INTO] tbl [(col,...)] SELECT ...;

限制

不能在子查詢中對同一表執行 REPLACE 並同時 SELECT。

典型場景

「插入或更新」(Upsert)邏輯,如同步外部數據源、去重導入。

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