MySQL 的 REPLACE 函数用途与语句示例详解

 更新时间:2026年04月24日 10:22:05   作者:untE EADO  
文章介绍了MySQL的REPLACE函数和REPLACEINTO语句的用途、语法和示例,REPLACE函数用于字符串替换,而REPLACEINTO语句用于插入或替换整行记录,两者都可以在特定条件下执行写操作,但REPLACEINTO是真正的删除和插入操作,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

MySQL 的 REPLACE 有两个不同的用途,分别是:

  1. REPLACE() 函数:用于字符串替换。
  2. REPLACE INTO 语句:用于插入或替换整行记录(类似 INSERT INTO ... ON DUPLICATE KEY UPDATE)。

✅ 一、REPLACE()函数

📌 语法:

REPLACE(str, from_str, to_str)

🧾 参数说明:

参数类型描述
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, ...);

🧾 参数说明:

参数类型描述
table_name表名要操作的数据表
(column1, column2, ...)列名列表可选,指定插入列
(value1, value2, ...)值列表对应列的值

💡 功能说明:

  • 如果插入的记录与表中已有的主键或唯一索引冲突,则删除旧记录并插入新记录。
  • 否则,直接插入新记录。
  • 本质是“先删除再插入”,不是更新!

📌 示例:

REPLACE INTO users (id, name) VALUES (1, 'Alice');

如果 users 表中已有 id = 1 的记录,则该记录会被删除并插入新记录。

🧾 总结对比表格

特性REPLACE(str, from_str, to_str)REPLACE INTO
类型字符串函数SQL 语句
使用场景替换字符串中的部分内容插入或替换整条记录
是否影响原数据不修改原数据,仅返回新字符串实际执行写操作(删除 + 插入)
是否需要唯一索引是(依赖主键或唯一约束)
返回值替换后的字符串影响的行数(1 或 2)
示例SELECT REPLACE(name, 'a', 'A')REPLACE INTO table VALUES(...)

⚠️ 注意事项

  • REPLACE INTO 实际上是“删除+插入”,如果有自增主键,会导致 ID 变化。
  • REPLACE() 函数区分大小写(默认情况下)。
  • 在使用 REPLACE INTO 时要确保有合适的主键或唯一索引,否则等同于普通插入。

如需更细粒度控制(例如只更新某些字段),建议使用 INSERT INTO ... ON DUPLICATE KEY UPDATE

案例

以下是实现批量替换 [goods](file://D:\workspace\me\rbac2024\read\后台系统\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\后台系统\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列包含 8.130.70.131 字符串为 zhongyuele.top 的 SQL 语句,并对语法中的关键字进行详细说明,最后以表格形式总结。

✅ 执行 SQL 语句

UPDATE goods
SET image = REPLACE(image, '8.130.70.131', 'zhongyuele.top')
WHERE image LIKE '%8.130.70.131%';

📚 关键字说明

关键字/函数说明
UPDATE用于修改表中的数据。指定要更新的表名(这里是 [goods](file://D:\workspace\me\rbac2024\read\后台系统\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\后台系统\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列设置为 REPLACE(...) 的结果。
REPLACE(str, from_str, to_str)MySQL 内置字符串函数,用于将 str 中的所有 from_str 替换为 to_str
WHERE可选,但建议加上,用于限定只更新包含 8.130.70.131 的记录,避免全表更新影响性能。
LIKE用于模式匹配,这里的 % 是通配符,表示任意字符序列。'%8.130.70.131%' 表示包含该字符串的所有记录。

🧾 总结表格

SQL 元素示例含义
UPDATEUPDATE goods更新 [goods](file://D:\workspace\me\rbac2024\read\后台系统\shop-api\itmk-base-web\src\main\java\com\itmk\web\sys_banner\entity\SysBanner.java#L23-L24) 表的数据
SETSET image = ...设置 [image](file://D:\workspace\me\rbac2024\read\后台系统\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\后台系统\shop-api\itmk-base-web\src\main\java\com\itmk\web\goods\entity\Goods.java#L47-L47) 列中的旧字符串为新字符串
WHEREWHERE image LIKE '%8.130.70.131%'仅更新包含目标字符串的行
LIKE'%'通配符,匹配任意字符组合

⚠️ 注意事项

  • 备份数据:在执行前请先备份表数据。
  • 测试环境验证:建议先在测试环境中运行确认无误后再上线。
  • 性能考虑:若表数据量大,建议在低峰期执行,或分批次更新。

例如分页更新:

UPDATE goods
SET image = REPLACE(image, '8.130.70.131', 'zhongyuele.top')
WHERE image LIKE '%8.130.70.131%'
LIMIT 1000;

可多次执行直到所有记录处理完毕。

补充:

MySQL中的 REPLACE 函数用于字符串替换:将字符串中所有出现的指定子串替换为另一个子串。它不会修改原始数据,仅返回替换后的结果。

语法

REPLACE(str, from_str, to_str)
  • str:原始字符串(要处理的文本)
  • from_str:需要被替换的子串(区分大小写)
  • to_str:替换后的新子串

当 from_str 为空字符串时,REPLACE 直接返回原字符串 str

基本示例

SELECT REPLACE('Hello world', 'world', 'MySQL');
-- 结果: 'Hello MySQL'
SELECT REPLACE('abc abc abc', 'abc', '123');
-- 结果: '123 123 123'
SELECT REPLACE('MySQL is powerful. MySQL is popular.', 'MySQL', 'PostgreSQL');
-- 结果: 'PostgreSQL is powerful. PostgreSQL is popular.'

注意事项

区分大小写REPLACE 默认区分大小写。若需不区分大小写替换,可结合 LOWER() / UPPER() 或使用正则表达式函数(如 REGEXP_REPLACE)。

-- 不会替换,因为大小写不符
SELECT REPLACE('Hello World', 'world', 'MySQL');  -- 'Hello World'
-- 不区分大小写方式
SELECT REGEXP_REPLACE('Hello World', '(?i)world', 'MySQL');
  • 替换所有出现函数会替换所有匹配的 from_str,而非仅第一个。
  • 与 REPLACE 语句的区别
    • REPLACE() 函数:字符串处理,用于 SELECTUPDATE 等表达式。
    • REPLACE 语句:用于插入或替换表中的行(类似 INSERT),语法为 REPLACE INTO table ...。两者容易混淆,请注意区分。

实际应用场景

清理数据:去除或替换字段中的特定字符,如换行符、标点。

UPDATE articles SET content = REPLACE(content, '\r\n', '\n');

动态生成内容:在查询中替换文本模板的占位符。

SELECT REPLACE('Dear {name}, your order is {order_id}', '{name}', customer_name) FROM orders;

辅助字符串处理:结合其他函数(如 CONCATSUBSTRING)进行复杂转换。

性能提示

  • REPLACE 会扫描整个字符串,对长文本和大数据量操作时注意性能。
  • 若频繁替换且数据量大,考虑在应用层处理或使用更高效的存储方式(如 JSON 字段、全文索引)。

如果你指的是 REPLACE 语句(替换行),请明确告知,我可以为你进一步解释。

到此这篇关于MySQL 的 REPLACE 函数用途与语句示例详解的文章就介绍到这了,更多相关mysql replace函数语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySql索引的作用以及对索引的理解

    MySql索引的作用以及对索引的理解

    这篇文章主要给大家介绍了关于MySql索引的作用以及对索引的理解,MySQL索引的建立对于MySQL的高效运行是很重要的,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧
    2015-11-11
  • 解决ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (111)的问题

    解决ERROR 2003 (HY000): Can‘t connect to MySQL server 

    在Windows系统上使用Django连接Ubuntu虚拟机中的MySQL数据库时,遇到无法连接的问题,排查后发现是由于MySQL绑定的IP地址改变导致的,下面就来介绍一下问题解决,感兴趣的可以了解一下
    2024-09-09
  • win10 安装 mysql 5.7 msi版的教程图文详解

    win10 安装 mysql 5.7 msi版的教程图文详解

    这篇文章主要介绍了win10 安装 mysql 5.7 msi版的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • MySQL数据类型之TINYINT类型的使用解析

    MySQL数据类型之TINYINT类型的使用解析

    MySQL 作为最流行的关系型数据库之一,提供了从 TINYINT 到 BIGINT 五种不同范围的整数类型,本文将着重为大家介绍TINYINT类型的使用,需要的小伙伴可以了解下
    2025-05-05
  • MySQL 用了索引还是很慢的原因分析及解决方案

    MySQL 用了索引还是很慢的原因分析及解决方案

    本文给大家分享即使查询使用了索引,仍然可能很慢,主要原因包括索引设计问题、SQL写法问题、数据分布问题、表/O开销大、数据库配置问题和硬件资源瓶颈等,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • 详细聊聊MySQL中慢SQL优化的方向

    详细聊聊MySQL中慢SQL优化的方向

    由于在MySQL日常查询中,查询类型的语句占慢sql的大部分,所以下面这篇文章主要给大家介绍了关于MySQL中慢SQL优化方向的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 浅谈MySQL user权限表

    浅谈MySQL user权限表

    MySQL 在安装时会自动创建一个名为 mysql 的数据库,mysql 数据库中存储的都是用户权限表。本文就详细的介绍一下MySQL user权限表 ,感兴趣的可以了解一下
    2021-06-06
  • MySQL 数据库双向镜像、循环镜像(复制)

    MySQL 数据库双向镜像、循环镜像(复制)

    在MySQL数据库镜像的贴子中,主数据库A 的数据镜像到从数据库B,是单向的,Zen Cart网店的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中。但是对数据库B的直接操作,不会影响数据库A。
    2011-05-05
  • Mysql查询时间区间日期列表实例代码

    Mysql查询时间区间日期列表实例代码

    最近常用到mysql的日期范围搜索,下面这篇文章主要给大家介绍了关于Mysql查询时间区间日期列表的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论