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

MySQL REPLACE() 函數實戰:批量更新表中字段的局部字符串替換技巧

     編輯:MySQL 資料庫相關知識

核心語法

UPDATE table_name
SET column_name = REPLACE(column_name, 'old_substring', 'new_substring')
[WHERE condition];
  • REPLACE(str, from_str, to_str):將 str 中**所有**出現的 from_str 替換為 to_str,區分大小寫。
  • 若 from_str 為空字符串,不做任何操作。

實戰案例

案例 1:私信主題前綴本地化

UPDATE `cdb_pms` SET `subject` = REPLACE(`subject`, 'Welcome to', '歡迎光臨');

案例 2:用戶表 host 字段域名遷移

-- 原數據
SELECT host, user FROM mysql.user WHERE user='testuser';
-- localhost.localdomain | testuser

UPDATE mysql.user SET host = REPLACE(host, 'main', 'slave') WHERE user='testuser';
-- 結果:localhost.localdoslave | testuser  (演示替換任意子串)

案例 3:文章正文敏感詞過濾

UPDATE dede_addonarticle SET body = REPLACE(body, '大法', '方法');

案例 4:商品類型編碼批量升級

-- 原:type 以 '78' 開頭
UPDATE items SET type = REPLACE(type, '78', '79');
-- 17536 行受影響,前綴統一變更為 '79'

性能與注意事項

  • 全表掃描:無 WHERE 條件會鎖表掃描全表,大表請分批(按主鍵範圍)或維護窗口執行。
  • 索引失效:更新被索引列會導致二級索引重建,評估寫入放大。
  • 字符集一致性:替換前後字符集需兼容,避免亂碼。
  • 不可逆:執行前務必備份或先 SELECT 預覽受影響行。

進階:多次替換鏈式/嵌套

UPDATE t SET col = REPLACE(REPLACE(REPLACE(col, 'a', 'A'), 'b', 'B'), 'c', 'C');

或配合 CASE WHEN 實現條件替換。

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