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

 更新时间:2025年11月29日 11:21:09   作者:又是长脑子的一天  
MySQL正则表达式是一种强大的文本匹配工具,允许执行复杂的字符串搜索和处理,这篇文章主要介绍了MySQL数据库中正则表达式(Regex)和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区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 5.5.x my.cnf参数配置优化详解

    MySQL 5.5.x my.cnf参数配置优化详解

    今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下
    2015-08-08
  • mysql 事务解析

    mysql 事务解析

    这篇文章主要给大家分享的是mysql事务解析,事务(transaction)是业务逻辑的一个基本的单元组成,下面文章围绕mysql事务的相关资料展开详细内容,需要的朋友可以参考一下希望对大家有所帮助
    2021-11-11
  • 提升MySQL查询效率及查询速度优化的四个方法详析

    提升MySQL查询效率及查询速度优化的四个方法详析

    查询语句的优化是提高MySQL查询速度的重要方法,可以通过使用JOIN语句、子查询、优化where子句等方式来减少查询的时间,下面这篇文章主要给大家介绍了关于提升MySQL查询效率及查询速度优化的四个方法,需要的朋友可以参考下
    2023-04-04
  • mysql数据库提权的三种方法

    mysql数据库提权的三种方法

    文介绍了MySQL数据库的三种提权方法:UDF提权、MOF提权和启动项提权,同时列出了一些常见数据库及其默认端口,下面就来介绍一下,感兴趣的可以了解一下
    2024-09-09
  • mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常
    2012-11-11
  • mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例

    mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例

    下面小编就为大家带来一篇mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 一文解答什么是MySQL的回表

    一文解答什么是MySQL的回表

    这篇文章主要介绍了一文解答什么是MySQL的回表,回表就是 MySQL要先查询到主键索引,然后再用主键索引定位到数据,文章围绕主题展开详细的内容介绍,需要的朋友可以参考一下
    2022-08-08
  • 深入了解SQL注入

    深入了解SQL注入

    本篇文章通过SQL和MYSQL的对比,以及SQL注入的原理等方面详细分析了SQL注入相关知识点,对此有兴趣的朋友学习下。
    2018-02-02
  • MySQL建立数据库时字符集与排序规则的选择详解

    MySQL建立数据库时字符集与排序规则的选择详解

    当数据库需要适应不同的语言就需要有不同的字符集,下面这篇文章主要给大家介绍了关于MySQL建立数据库时字符集与排序规则的选择的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理

    MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理

    这篇文章主要介绍了MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-08-08

最新评论