萬盛學電腦網

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

MySQL 批量查找與替換 SQL 語法:SELECT 定位 + REPLACE 更新實戰

MySQL 批量字串查找替換:精準定位與安全執行

第一步:精準定位目標資料 (SELECT)


-- 找出包含特定字串的記錄
SELECT products_name
FROM nike.products_description
WHERE products_name LIKE '%#%';  -- # 為目標字串

-- 統計影響範圍
SELECT COUNT(*) FROM nike.products_description
WHERE products_name LIKE '%#%';

第二步:批量替換執行 (UPDATE + REPLACE)


UPDATE article
SET content = REPLACE(content, 'sjolzy', '111cn.net')
WHERE content LIKE '%sjolzy%';

完整參數說明

元素說明
table_name目標表名
column_name目標欄位名
from_str被替換的子字串 (區分大小寫)
to_str替換後的字串
WHERE 條件**必加**,限制掃描範圍,避免全表鎖定

進階替換場景

多欄位同時替換


UPDATE products
SET
  name = REPLACE(name, 'old_brand', 'new_brand'),
  description = REPLACE(description, 'old_brand', 'new_brand')
WHERE name LIKE '%old_brand%' OR description LIKE '%old_brand%';

跨表替換 (JOIN 更新)


UPDATE target_table t
JOIN source_table s ON t.id = s.ref_id
SET t.column = REPLACE(t.column, s.old_val, s.new_val)
WHERE t.column LIKE CONCAT('%', s.old_val, '%');

正則表達式替換 (MySQL 8.0+)


-- 將所有數字替換為 [NUM]
UPDATE articles SET content = REGEXP_REPLACE(content, '[0-9]+', '[NUM]');

大表安全執行清單

  1. 備份先行:mysqldump -t db table > backup_table.sql
  2. 分批處理**:每批 1000-5000 行,避免長事務鎖表

-- 分批模板
REPEAT
  UPDATE large_table
  SET col = REPLACE(col, 'old', 'new')
  WHERE col LIKE '%old%'
  LIMIT 1000;
UNTIL ROW_COUNT() = 0 END REPEAT;
  1. 低峰期執行**:業務閒時段減少衝突
  2. 監控鎖等待**:SHOW ENGINE INNODB STATUS\G 觀察 LOCK WAIT
  3. 驗證結果**:SELECT COUNT(*) FROM table WHERE col LIKE '%new%'

鐵律: 無 WHERE 條件的 UPDATE REPLACE = 生產事故。永遠先 SELECT 驗證影響行數,再分批 UPDATE,事後 ANALYZE TABLE 更新統計資訊。

copyright © 萬盛學電腦網 all rights reserved