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

MySQL REPLACE 函數與 REPLACE INTO 完整用法詳解

     編輯:MySQL 資料庫相關知識

一、字串替換函數:REPLACE(str, from_str, to_str)


SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-- 回傳 'WwWwWw.mysql.com'

-- 更新表欄位
UPDATE `dede_addonarticle` SET body = REPLACE(body, '', '');
UPDATE `dede_archives` SET title = REPLACE(title, '大洋新聞 - ', '');
UPDATE `dede_addonarticle` SET body = REPLACE(body, '../../../../../../', 'https://example.com/');

特性:多位元組安全、全域替換(所有出現處)、回傳新字串(原欄位未變,需 SET col = REPLACE(col,...))。

二、REPLACE INTO 陳述式(UPSERT 語意)


REPLACE INTO `table` (id, name) VALUES (1, 'aa'), (2, 'bb');

行為:
1. 嘗試 INSERT。
2. 若主鍵/唯一鍵衝突 → 刪除舊行 → 再 INSERT 新行。
3. 回傳影響行數 = 刪除行數 + 插入行數(1 表示純插入,>1 表示有替換)。

前置條件

  • 表**必須有 PRIMARY KEY 或 UNIQUE INDEX**,否則退化為 INSERT。
  • 需同時擁有 INSERT 與 DELETE 權限。

三、REPLACE(object, search, replace) 別名用法

同字串函數,參數順序:REPLACE(目標字串, 搜尋字串, 替換字串)。


SELECT REPLACE('www.163.com', 'w', 'Ww');  -- 'WwWwWw.163.com'
UPDATE `table` SET `name` = REPLACE(`name`, 'aa', 'bb');

四、演算法細節(官方文檔)

  1. 嘗試插入新行。
  2. 若主鍵/唯一鍵衝突報錯:
    a. 刪除衝突行。
    b. 重試插入。

若有多個唯一索引,新行可能同時衝突多個舊行 → 單行替換多行。

五、完整語法


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

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col=value, ...;

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_list)]
SELECT ...;

六、C API 取得影響行數


mysql_affected_rows(conn);  // 返回刪除+插入總行數

七、限制

  • 不支援在子查詢中對同表 REPLACE 同時 SELECT。
  • AUTO_INCREMENT 值在替換時會重新分配(舊行刪除、新行插入)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved