CREATE TABLE stack ( id int AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL ); INSERT stack(username) VALUES ('admin'),('k admin'),('adm'),('a adm b'),('b XadmY c'), ('adm now'), ('not here');
任意位置的“ adm”:
SELECT * FROM stack WHERE username LIKE "%adm%"; +----+-----------+ | id | username | +----+-----------+ | 1 | admin | | 2 | k admin | | 3 | adm | | 4 | a adm b | | 5 | b XadmY c | | 6 | adm now | +----+-----------+
以“ adm”开头:
SELECT * FROM stack WHERE username LIKE "adm%"; +----+----------+ | id | username | +----+----------+ | 1 | admin | | 3 | adm | | 6 | adm now | +----+----------+
以“ adm”结尾:
SELECT * FROM stack WHERE username LIKE "%adm"; +----+----------+ | id | username | +----+----------+ | 3 | adm | +----+----------+
正如%一个字符LIKE条款任意数目的字符匹配,_匹配字符一个字符。例如,
SELECT * FROM stack WHERE username LIKE "adm_n"; +----+----------+ | id | username | +----+----------+ | 1 | admin | +----+----------+
性能说明如果上有一个索引username,则
LIKE 'adm' 执行与`='adm'相同的操作
LIKE 'adm%是一个“范围”,类似于BETWEEN..AND..它可以充分利用列上的索引。
LIKE '%adm'(或带有前导通配符的任何变体)不能使用任何索引。因此,它将很慢。在具有许多行的表上,它可能是如此之慢,以至于毫无用处。
RLIKE(REGEXP)的速度往往比慢LIKE,但功能更多。
虽然MySQL提供了FULLTEXT对许多类型的表和列的FULLTEXT索引,但是这些索引并不用于使用来完成查询LIKE。