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

MySQL REPLACE 函數與語句雙重用法詳解

     編輯:MySQL 資料庫相關知識

兩種完全不同的 REPLACE

類型語法用途
字符串函數REPLACE(str, from_str, to_str)列值/字符串內容替換
DML 語句REPLACE INTO tbl(col...) VALUES(...)主鍵/唯一鍵衝突時覆蓋插入

1. REPLACE 字符串函數

基本語法

REPLACE(str, from_str, to_str)
-- 返回:str 中所有 from_str 替換為 to_str 後的新字符串
-- 特性:多字節安全、任一參數為 NULL 則返回 NULL

實戰範例

-- 單次替換
SELECT REPLACE('www.mysql.com', 'w', 'Ww');  -- 'WwWwWw.mysql.com'

-- 批量清洗敏感詞
UPDATE bb_topic 
SET content = REPLACE(REPLACE(content, '敏感詞1', ''), '敏感詞2', '')
WHERE content LIKE '%敏感詞1%' OR content LIKE '%敏感詞2%';

-- CMS 內容遷移:清理舊域名
UPDATE dede_addonarticle SET body = REPLACE(body, '', '');
UPDATE dede_addonarticle SET body = REPLACE(body, '', '');
UPDATE dede_archives SET title = REPLACE(title, '大洋新聞 - ', '');
UPDATE dede_addonarticle SET body = REPLACE(body, '../../../../../../', 'https://new.domain/path/');

數值類型隱式轉換陷阱

-- 數值會被轉為二進制字符串再替換
SELECT REPLACE(12345, '3', 'X');  -- '12X45' (隱式 CAST)

-- 避免隱式轉換:顯式 CAST
SELECT REPLACE(CAST(int_col AS CHAR), '3', 'X');

2. REPLACE INTO 語句

行為邏輯

  1. 嘗試插入新行
  2. 若主鍵/唯一鍵衝突 → 刪除舊行 → 插入新行
  3. 本質:DELETE + INSERT,觸發器按此順序觸發

關鍵差異對比

場景REPLACE INTOINSERT ... ON DUPLICATE KEY UPDATE
未指定列置 NULL保留原值
自增 ID重新分配保持不變
外鍵關聯可能觸發級聯刪除安全
性能較慢(雙操作)較快(單操作)

適用建議

  • ✅ 需要完全覆蓋、主鍵業務無關、無外鍵依賴
  • ❌ 避免用於有自增 ID 業務關聯、有外鍵、需保留部分列的表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved