萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 批量替換指定字符實戰筆記:UPDATE SET REPLACE 組合技巧

基礎批量更新:直接修改字段值

最簡單場景:將符合條件的行某字段統一設為固定值。

UPDATE `table_A` SET is_checked = 1 WHERE cityid = 93;

執行結果:影響列數:214 (查詢花費 0.0833 秒)

進階替換:字符串局部替換

當字段值中僅部分需替換(如清洗 HTML 實體字符):

UPDATE `table_name`
SET `column_B` = REPLACE(`column_B`, '">', '')
WHERE `column_B` LIKE '%">%';

操作步驟規範

  1. 先查確認:SELECT * FROM table_A WHERE column_B LIKE '%">%' → 返回 241 行
  2. 執行替換:帶相同 WHERE 條件的 UPDATE
  3. 驗證結果:再次 SELECT 確認無殘留

實戰經驗總結

1. REPLACE 函數特性

  • 替換所有匹配出現,非單次
  • 區分大小寫
  • 若 old_str 為空串,MySQL 8.0 報錯,5.7 返回原值

2. 安全操作清單

-- 1. 開啟事務
START TRANSACTION;

-- 2. 預估影響行數
SELECT COUNT(*) FROM `table` WHERE `col` LIKE '%target%';

-- 3. 執行替換(帶 LIMIT 防失控)
UPDATE `table` SET `col` = REPLACE(`col`, 'target', 'replacement')
WHERE `col` LIKE '%target%' LIMIT 10000;

-- 4. 核對 ROW_COUNT()
-- 5. 提交或回滾
COMMIT;

3. 大表性能優化

  • WHERE 條件列加索引
  • 按主鍵範圍分批:WHERE id BETWEEN 1 AND 10000 AND col LIKE ...
  • 避免在高峰期執行,必要時用 pt-online-schema-change 思路構建影子表

4. 特殊字符轉義注意

SQL 字符串中單引號需轉義:'it\'s' 或雙引號包裹 "it's"。涉及反斜杠、百分號、下劃線等通配符時,REPLACE 參數按字面匹配,無需額外轉義,但 LIKE 條件中需轉義:LIKE '%\\_%' ESCAPE '\\'。

總結

UPDATE ... SET col = REPLACE(col, 'old', 'new') WHERE ... 是 MySQL 字符串批量清洗的核心手法。遵循先查後改、事務包裹、分批執行、索引加速四步法,可安全高效處理從幾百行到億級數據的替換任務。

copyright © 萬盛學電腦網 all rights reserved