UPDATE table_name
SET column_name = REPLACE(column_name, 'old_string', 'new_string')
[WHERE condition];
UPDATE qlj_joke SET content = REPLACE(content, ' ', '');UPDATE wp_posts SET post_content = REPLACE(post_content, 'old.com', 'new.com');UPDATE wp_comments SET comment_content = REPLACE(comment_content, 'PJBlog', 'WordPress');UPDATE backupfile SET logical_name = CONCAT('tmp', logical_name, ' end') WHERE file_number = 1;語法:REPLACE INTO tbl (cols) VALUES (...);
行為:
1 (新增) 或 2 (刪除舊+插入新)REPLACE INTO fanwe_order (id, sn) VALUES (33, '測試replace into 使用');
-- 受影響行數:2 (原有 id=33 被刪除,新行插入)
SELECT * FROM fanwe_order WHERE sn = '測試replace into 使用';
-- 僅返回 1 行新記錄
| 特性 | REPLACE INTO | INSERT ... ON DUPLICATE KEY UPDATE |
|---|---|---|
| 衝突處理 | 刪除舊行 + 插入新行 | 更新指定欄位 |
| 自增 ID | 可能改變(舊行刪除) | 保持不變 |
| 外鍵關聯 | 可能觸發級聯刪除 | 安全,無刪除動作 |
| 效能 | 較低(刪除+插入) | 較高(就地更新) |
| 適用場景 | 需完全替換整行、無外鍵依賴 | 部分欄位更新、保留自增 ID、有外鍵 |
REPLACE() 函數區分大小寫,若需不區分大小寫替換,可用 REPLACE(LOWER(col), LOWER('old'), 'new') 但會改變原大小寫。WHERE id BETWEEN ... AND ... 循環執行。REPLACE INTO 需要表有主鍵或唯一索引,否則退化為單純 INSERT。