MySQL LIKE 子句
用 LIKE 做模式匹配,% 与 _ 的用法与索引陷阱。
Key PointsLIKE 适合简单的包含/前缀匹配;复杂文本检索应改用全文索引。
通配符
SQL
SELECT * FROM users WHERE username LIKE 'a%'; -- 以 a 开头
SELECT * FROM users WHERE email LIKE '%example.com'; -- 以 example.com 结尾
SELECT * FROM users WHERE username LIKE '____'; -- 正好 4 个字符
SELECT * FROM users WHERE username LIKE '%li%'; -- 包含 liOutput
+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1 | alice | 29 |
+----+----------+-----+大小写与转义
SQL
-- 转义 % 或 _
SELECT * FROM users WHERE username LIKE 'a#%' ESCAPE '#';A leading-wildcard
LIKE '%xx' defeats the index and scans the whole table. For heavy substring search use FULLTEXT or a real search engine.通配符
SQL
SELECT * FROM users WHERE username LIKE 'a%'; -- 以 a 开头
SELECT * FROM users WHERE email LIKE '%example.com'; -- 以 example.com 结尾
SELECT * FROM users WHERE username LIKE '____'; -- 正好 4 个字符
SELECT * FROM users WHERE username LIKE '%li%'; -- 包含 liOutput
+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1 | alice | 29 |
+----+----------+-----+大小写与转义
SQL
-- 转义 % 或 _
SELECT * FROM users WHERE username LIKE 'a#%' ESCAPE '#';LIKE '%xx' 这种「前模糊」会让索引失效、退化为全表扫描。如果业务大量做包含匹配,考虑 FULLTEXT 全文索引或专门的搜索引擎(Elasticsearch / Meilisearch)。