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

MySQL REPLACE INTO 語法詳解:插入或替換的完整指南

     編輯:MySQL 資料庫相關知識

核心機制

REPLACE 與 INSERT 類似,差異在於:若表中已存在相同主鍵或唯一索引的記錄,先刪除舊記錄再插入新記錄。

前提: 表必須有 PRIMARY KEY 或 UNIQUE 索引,否則行為等同 INSERT。

權限需求

需同時擁有表的 INSERT 與 DELETE 權限。

回傳值說明

回傳受影響行數 = 刪除行數 + 插入行數

  • 返回 1:單純插入,無刪除
  • 返回 >1:有舊行被刪除(可能一行替換多行,若多個唯一索引衝突)

C API 可用 mysql_affected_rows() 取得。

演算法流程

  1. 嘗試插入新行
  2. 若因主鍵/唯一鍵衝突失敗:
    a. 刪除衝突行
    b. 再次嘗試插入

語法格式

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    VALUES ({expr | DEFAULT},...),(...),...

-- 或 SET 語法
REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...

-- 或從 SELECT
REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...

注意事項

  • 所有欄位值取自 REPLACE 指定值,缺失欄位用預設值
  • 無法在賦值中引用當前行值(如 SET col = col + 1 會被視為 DEFAULT(col) + 1)
  • 不支援在子查詢中同時對同一表做 REPLACE 與 SELECT
  • DELAYED 選項在某些版本中被忽略
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved