导读:本期聚焦于小伙伴创作的《MySQL中Like是什么意思?它和等于号查询有什么区别?》,敬请观看详情。做数据库查询时,经常遇到只想匹配一部分内容的情况,比如搜姓名里带“张”的用户。这时用等于号就查不到,Like才是专门做模糊匹配的操作符。它配合百分号和下划线两个通配符,能按片段、按位置灵活筛选字符字段。Like支持前缀、中间及后缀匹配,也区分大小写取决于字符集和排序规则。和等于号比,Like牺牲了部分性能换来查询灵活性,在没索引或前缀模糊时可能全表扫描。理解Like的含义和通配符用法,能帮你在日志检索、搜索框联想等场景写出更合理的SQL。

在MySQL里,Like是一个用于进行字符串模糊匹配的比较操作符。当我们不能确定字段的完整值,只想找出包含某些字符、或以某段字符开头结尾的记录时,就等于号无法胜任,必须用Like配合通配符来描述匹配规则。它最常见的使用场景就是搜索框、日志关键字过滤、用户名片段查询等。

MySQL中Like是什么意思?它和等于号查询有什么区别?

Like的基本语法与通配符

Like操作符一般写在Where条件中,基本形式是字段名 Like '匹配模式'。它依赖两个核心通配符:百分号%代表任意长度(包括零长度)的任意字符,下划线_代表恰好一个任意字符。例如name Like '张%'表示姓张的所有人,name Like '张_'表示姓张且名字只有两个字的人。

除了这两个通配符,还可以用Not Like取反,找出不匹配模式的记录。如果字段里本身就包含百分号或下划线,需要用转义符声明,比如Like '50%%' ESCAPE ''表示以“50%”开头的字符串。掌握这些基础规则,才能避免写出误匹配或查不到数据的SQL。

-- 查找用户名中包含  admin 的所有记录
SELECT id, username
FROM user
WHERE username LIKE '%admin%';

-- 查找手机号前三位为 138 的记录
SELECT id, phone
FROM user
WHERE phone LIKE '138%';

-- 查找姓名恰好为两个汉字且姓李的记录
SELECT id, name
FROM user
WHERE name LIKE '李_';

Like与等于号查询的区别

等于号(=)做的是精确匹配,要求字段值和给定值完全一致,包括长度和字符顺序。而Like做的是模式匹配,只要字段内容符合你写的模糊规则就返回。比如字段值是“张三丰”,用= '张'查不到,但用Like '张%'就能查到。二者语义差异决定了使用场合:精确查找用等于,片段搜索用Like。

在性能层面,等于号在字段有索引时通常能快速定位;Like如果以%开头(如'%abc')则无法有效利用B+树索引,只能全表扫描。只有前缀匹配(如'abc%')才可能用到索引。因此实际开发中,不应滥用Like做所有查询,而应根据业务需要选择操作符,并对高频模糊字段考虑全文索引等方案。

对比项等于号(=)Like
匹配方式精确匹配完整值按通配符模糊匹配
常见用途主键查询、状态判断搜索、关键字过滤
索引利用易命中索引仅前缀匹配易命中

使用Like的注意事项

第一个常见误区是认为Like一定慢。其实如果是'abc%'这种前缀模糊,且字段有普通索引,MySQL依然可以范围扫描,速度并不差。真正导致慢查询的是前后都带%的写法,此时只能逐行比对。若系统对这类需求性能敏感,可改用全文索引(FULLTEXT)或外部搜索引擎。

第二个注意点是字符集和排序规则会影响匹配行为。例如使用utf8_general_ci时,Like不区分大小写;换成utf8_bin就区分。因此在跨平台或多人协作项目里,要确认库的排序规则,避免“明明数据有却查不出”的问题。下面示例展示如何指定区分大小写的查询:

-- 使用二进制排序规则强制区分大小写
SELECT id, code
FROM product
WHERE code LIKE 'AB%' COLLATE utf8_bin;

实践中的典型用法

在后台管理系统中,搜索订单号片段、用户昵称关键字是Like的高频用法。推荐把用户输入做转义后再拼接,防止通配符注入。例如用户搜“%”本身,若直接拼进Like会导致匹配全部,应转义为%。如下面PHP片段演示了简单转义逻辑:

$keyword = $_GET['q'];
// 将用户输入中的 % 和 _ 转义,避免通配符滥用
$escaped = strtr($keyword, array('%' => '%', '_' => '_'));
$sql = "SELECT * FROM article WHERE title LIKE '%" . $escaped . "%' ESCAPE '\'";

另一个实践是结合Concat函数实现多字段联合模糊搜。比如同时搜标题或内容包含词项的文章,可以用Where Concat(title, content) Like '%词%',不过这种写法通常无法用索引,仅适合小表或低频操作。数据量大时应分别为字段建全文索引,或用搜索引擎分担。

MySQLLike模糊查询修改时间:2026-08-05 02:15:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。