mysql如何使用like模糊查询

答案:LIKE操作符用于模糊查询,支持%和_通配符,可匹配任意或单个字符,常用于查找指定模式的字符串;例如'%li%'匹配包含"li"的名字,'_o%'匹配第二个字母为"o"的字符串;默认不区分大小写,可通过BINARY实现区分;含特殊字符时需用ESCAPE转义;但前导通配符可能导致全表扫描,影响性能。

在 MySQL 中,LIKE 操作符用于在 WHERE 子句中进行模糊匹配查询。它通常与通配符配合使用,用来查找符合某种模式的字符串数据。

1. 通配符的使用

MySQL 支持两种主要的通配符:

  • %:匹配任意数量的字符(包括零个字符)
  • _:匹配单个字符

例如:

  • LIKE 'a%':查找以 "a" 开头的字符串
  • LIKE '%abc':查找以 "abc" 结尾的字符串
  • LIKE '%mysql%':查找包含 "mysql" 的字符串
  • LIKE 'a_b':匹配像 "aab"、"acb" 这样中间一个任意字符的三字母字符串

2. 基本语法示例

假设有一个用户表 users,结构如下:

id | name     | email
---|----------|------------------
 1 | Alice    | alice@example.com
 2 | Bob      | bob@test.com
 3 | Charlie  | charlie@demo.com

执行以下查询:

  • 查找名字包含 "li" 的用户:
    SELECT * FROM users WHERE name LIKE '%li%';
    返回 Alice 和 Charlie。
  • 查找邮箱以 "@example" 结尾的记录:
    SELECT * FROM users WHERE email LIKE '%@example.com';
    返回 Alice 的记录。
  • 查找名字第二个字母是 "o" 的用户:
    SELECT * FROM users WHERE name LIKE '_o%';
    返回 Bob。

3. 大小写敏感性说明

在大多数默认配置下,MySQL 的 LIKE 查询是不区分大小写的,前提是字段使用的是不区分大小写的排序规则(如 utf8_general_ci)。

如果需要区分大小写,可以使用 BINARY 关键字:

  • SELECT * FROM users WHERE name LIKE BINARY 'Alice'; —— 区分大小写匹配
  • SELECT * FROM users WHERE name LIKE BINARY 'alice'; —— 不会匹配 "Alice"

4. 转义特殊字符

如果要查找的字符串本身包含 %_,需要使用 ESCAPE 关键字指定转义字符。

  • 查找名字中包含下划线 "_" 的记录:
    SELECT * FROM users WHERE name LIKE '%\_%' ESCAPE '\';
  • 也可以自定义转义字符,比如:
    SELECT * FROM users WHERE name LIKE '%!%%' ESCAPE '!'; —— 查找包含 "%" 的名字

基本上就这些。LIKE 查询简单实用,但注意在大表上对无索引字段使用前导通配符(如 LIKE '%abc')会导致全表扫描,影响性能。