当前位置: 代码网 > it编程>编程语言>正则表达式 > MySQL数据库中正则表达式(Regex)和like的区别详析

MySQL数据库中正则表达式(Regex)和like的区别详析

2025年11月30日 正则表达式 我要评论
核心区别:通配符 vs 模式语言like:使用简单的通配符%:匹配任意多个字符(包括0个)_:匹配单个字符正则表达式:使用完整的模式描述语言具体对比1.匹配能力对比需求场景like实现正则表达式实现说

核心区别:通配符 vs 模式语言

  • like:使用简单的通配符

    • %:匹配任意多个字符(包括0个)

    • _:匹配单个字符

  • 正则表达式:使用完整的模式描述语言

具体对比

1.匹配能力对比

需求场景like 实现正则表达式实现说明
以"a"开头like 'a%'^a两者都能做到
包含"abc"like '%abc%'abc两者都能做到
精确5个字符like '_____'^.{5}$like需要5个_,不直观
数字开头❌ 无法实现^\dlike无法匹配"任意数字"
邮箱验证❌ 极其困难^\w+@\w+\.\w+$like难以精确匹配
密码强度❌ 无法实现^(?=.*[a-z])(?=.*\d).{8,}$like无法做前瞻断言

2.实际案例演示

假设我们有一个用户表,要查找符合以下条件的用户名:

需求:找到以数字开头,第三个字符是元音字母,总长度至少为5的用户名

sql

-- 使用 like  几乎不可能实现
-- 我们需要枚举所有可能性:
select * from users where 
  name like '0_a%' or 
  name like '1_a%' or 
  name like '2_a%' or 
  -- ... 需要写30种组合,极其繁琐!
  name like '9_u%';

-- 使用正则表达式  一行搞定
select * from users where name regexp '^[0-9].[aeiou].{2,}';
-- 解释:^[0-9] 数字开头, . 任意字符, [aeiou] 元音字母, .{2,} 至少2个任意字符

3.性能考虑

  • like:在固定开头的情况下(如 'a%')可以利用索引,性能较好

  • 正则表达式:通常无法利用索引,全表扫描,性能较差

sql

-- 能利用索引(如果name有索引)
select * from users where name like 'john%';

-- 不能利用索引
select * from users where name like '%john%';
select * from users where name regexp 'john';

4.适用场景总结

场景推荐使用原因
简单前缀/后缀匹配like语法简单,可能利用索引
固定格式匹配like如 like 'abc____'
复杂模式匹配正则表达式如邮箱、电话、特定模式
数据验证正则表达式如密码强度、格式检查
数据提取正则表达式如从文本中提取特定模式

结论

您的观察是对的——对于简单的模式匹配,like 确实可以做到,而且应该优先使用,因为它的性能可能更好。

但是当需求变得复杂时:

  • like 就像是一把螺丝刀——适合简单的拧螺丝工作

  • 正则表达式就像是一个多功能工具箱——能处理各种复杂的维修任务

经验法则

  • 能用 like 解决的简单问题,就用 like

  • 当 like 需要写很长的 or 条件或者根本无法实现时,就使用正则表达式

在实际的数据库工作中,两者都是重要的工具,根据具体需求选择合适的使用才是关键!

到此这篇关于mysql数据库中正则表达式(regex)和like区别的文章就介绍到这了,更多相关mysql正则表达式regex和like区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com