MySQL 的 REPLACE 函數(shù)用途與語句示例詳解
MySQL 的 REPLACE 有兩個不同的用途,分別是:
REPLACE()函數(shù):用于字符串替換。REPLACE INTO語句:用于插入或替換整行記錄(類似INSERT INTO ... ON DUPLICATE KEY UPDATE)。

? 一、REPLACE()函數(shù)
?? 語法:
REPLACE(str, from_str, to_str)
?? 參數(shù)說明:
| 參數(shù) | 類型 | 描述 |
|---|---|---|
str | 字符串 | 原始字符串 |
from_str | 字符串 | 要被替換的子字符串 |
to_str | 字符串 | 替換后的新子字符串 |
?? 功能說明:
將字符串 str 中所有的 from_str 子字符串替換成 to_str,并返回新的字符串。如果 str 中不包含 from_str,則返回原始字符串。
?? 示例:
SELECT REPLACE('http://8.130.70.131/image.jpg', '8.130.70.131', 'zhongyuele.top');
-- 返回: http://zhongyuele.top/image.jpg
? 二、REPLACE INTO語句
?? 語法:
REPLACE INTO table_name [(column1, column2, ...)] VALUES (value1, value2, ...);
?? 參數(shù)說明:
| 參數(shù) | 類型 | 描述 |
|---|---|---|
table_name | 表名 | 要操作的數(shù)據(jù)表 |
(column1, column2, ...) | 列名列表 | 可選,指定插入列 |
(value1, value2, ...) | 值列表 | 對應(yīng)列的值 |
?? 功能說明:
- 如果插入的記錄與表中已有的主鍵或唯一索引沖突,則刪除舊記錄并插入新記錄。
- 否則,直接插入新記錄。
- 本質(zhì)是“先刪除再插入”,不是更新!
?? 示例:
REPLACE INTO users (id, name) VALUES (1, 'Alice');
如果 users 表中已有 id = 1 的記錄,則該記錄會被刪除并插入新記錄。
?? 總結(jié)對比表格
| 特性 | REPLACE(str, from_str, to_str) | REPLACE INTO |
|---|---|---|
| 類型 | 字符串函數(shù) | SQL 語句 |
| 使用場景 | 替換字符串中的部分內(nèi)容 | 插入或替換整條記錄 |
| 是否影響原數(shù)據(jù) | 不修改原數(shù)據(jù),僅返回新字符串 | 實(shí)際執(zhí)行寫操作(刪除 + 插入) |
| 是否需要唯一索引 | 否 | 是(依賴主鍵或唯一約束) |
| 返回值 | 替換后的字符串 | 影響的行數(shù)(1 或 2) |
| 示例 | SELECT REPLACE(name, 'a', 'A') | REPLACE INTO table VALUES(...) |
?? 注意事項(xiàng)
REPLACE INTO實(shí)際上是“刪除+插入”,如果有自增主鍵,會導(dǎo)致 ID 變化。REPLACE()函數(shù)區(qū)分大小寫(默認(rèn)情況下)。- 在使用
REPLACE INTO時要確保有合適的主鍵或唯一索引,否則等同于普通插入。
如需更細(xì)粒度控制(例如只更新某些字段),建議使用 INSERT INTO ... ON DUPLICATE KEY UPDATE。
案例
以下是實(shí)現(xiàn)批量替換 [goods](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\sys_banner\entity\SysBanner.java#L23-L24) 表中 [image](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列包含 8.130.70.131 字符串為 zhongyuele.top 的 SQL 語句,并對語法中的關(guān)鍵字進(jìn)行詳細(xì)說明,最后以表格形式總結(jié)。
? 執(zhí)行 SQL 語句
UPDATE goods SET image = REPLACE(image, '8.130.70.131', 'zhongyuele.top') WHERE image LIKE '%8.130.70.131%';
?? 關(guān)鍵字說明
| 關(guān)鍵字/函數(shù) | 說明 |
|---|---|
UPDATE | 用于修改表中的數(shù)據(jù)。指定要更新的表名(這里是 [goods](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\sys_banner\entity\SysBanner.java#L23-L24))。 |
SET | 指定要更新的列和新的值。這里將 [image](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列設(shè)置為 REPLACE(...) 的結(jié)果。 |
REPLACE(str, from_str, to_str) | MySQL 內(nèi)置字符串函數(shù),用于將 str 中的所有 from_str 替換為 to_str。 |
WHERE | 可選,但建議加上,用于限定只更新包含 8.130.70.131 的記錄,避免全表更新影響性能。 |
LIKE | 用于模式匹配,這里的 % 是通配符,表示任意字符序列。'%8.130.70.131%' 表示包含該字符串的所有記錄。 |
?? 總結(jié)表格
| SQL 元素 | 示例 | 含義 |
|---|---|---|
UPDATE | UPDATE goods | 更新 [goods](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\sys_banner\entity\SysBanner.java#L23-L24) 表的數(shù)據(jù) |
SET | SET image = ... | 設(shè)置 [image](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列的新值 |
REPLACE() | REPLACE(image, '8.130.70.131', 'zhongyuele.top') | 替換 [image](file://D:\workspace\me\rbac2024\read\后臺系統(tǒng)\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列中的舊字符串為新字符串 |
WHERE | WHERE image LIKE '%8.130.70.131%' | 僅更新包含目標(biāo)字符串的行 |
LIKE | '%' | 通配符,匹配任意字符組合 |
?? 注意事項(xiàng)
- 備份數(shù)據(jù):在執(zhí)行前請先備份表數(shù)據(jù)。
- 測試環(huán)境驗(yàn)證:建議先在測試環(huán)境中運(yùn)行確認(rèn)無誤后再上線。
- 性能考慮:若表數(shù)據(jù)量大,建議在低峰期執(zhí)行,或分批次更新。
例如分頁更新:
UPDATE goods SET image = REPLACE(image, '8.130.70.131', 'zhongyuele.top') WHERE image LIKE '%8.130.70.131%' LIMIT 1000;
可多次執(zhí)行直到所有記錄處理完畢。
到此這篇關(guān)于MySQL 的 REPLACE 函數(shù)用途與語句示例詳解的文章就介紹到這了,更多相關(guān)mysql replace函數(shù)語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql中刪除數(shù)據(jù)的幾種方法(最新推薦)
在MySQL數(shù)據(jù)庫中,刪除數(shù)據(jù)是一個常見的操作,它允許從表中移除不再需要的數(shù)據(jù),在執(zhí)行刪除操作時,需要謹(jǐn)慎,以免誤刪重要數(shù)據(jù),本文給大家介紹mysql中刪除數(shù)據(jù)的幾種方法,感興趣的朋友一起看看吧2023-11-11
一條sql詳解MYSQL的架構(gòu)設(shè)計(jì)詳情
這篇文章主要介紹了一條sql詳解MYSQL的架構(gòu)設(shè)計(jì)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-09-09
MySQL根據(jù)條件遷移數(shù)據(jù)的幾種方法實(shí)現(xiàn)
本文主要介紹了MySQL根據(jù)條件遷移數(shù)據(jù)的實(shí)現(xiàn),包括使用INSERT INTO SELECT、UPDATE、DELETE語句以及結(jié)合子查詢進(jìn)行遷移,具有一定的參考價值,感興趣的可以了解一下2024-02-02

