项目的模糊查找和分页

本文介绍了MySQL模糊查找技术,包括LIKE操作符的使用、通配符%和_的含义,以及LOCATE、POSITION和INSTR内置函数。此外,还详细讲解了正则表达式查询(REGEXP)及其与LIKE的区别,以及分页和MD5的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模糊查找

1. 通配符

模糊查询:LIKE

like操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;但如果like后面没出现通配符,则在SQL执行优化时将 like 默认为 “=”执行

通配符的分类:

"%" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)
"_" 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然,也可以like "陈____",数量不限

如果在使用like操作符时,后面没有使用通用匹配符(%或_),那么效果是和“=”一致的,相当于没用

①注意大小写,在使用模糊匹配时,也就是匹配文本时,MySQL默认配置是不区分大小写的

②注意尾部空格,"%test"是不能匹配"test "这样的记录的

③注意NULL,%通配符可以匹配任意字符,但是不能匹配NULL

带有"%"和"_"的指定数据。这里需要加 ESCAPE 关键字进行转义

如下,ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,一般我就写成"/"

SELECT * from app_info where appName LIKE '%/_%' ESCAPE '/';

 MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,消耗更多的内存等资源

2. 内置函数检索

LOCATE、POSITION、INSTR

SELECT * from app_info where INSTR(`appName`, '%') > 0;
 
SELECT * from app_info where LOCATE('%', `appName`) > 0;
 
SELECT * from app_info where POSITION( '%' IN `appName`) > 0;

语法:LOCATE(substr,str)、LOCATE(substr, str, [pos])

返回 substr 在 str 中第一次出现的位置。如果 substr 在 str 中不存在,返回值为 0,如果substr 在 str 中存在,返回值为:substr 在 str中第一次出现的位置,参数pos是从位置pos开始的字符串str中第一次出现子字符串substr的位置

语法:POSITION(substr IN substr)

这个方法可以理解为locate(substr,str)方法的别名,因为它和locate(substr,str)方法的作用是一样的

语法: INSTR(str,substr)

返回字符串str中第一次出现子字符串substr的位置。INSTR()与LOCATE()的双参数形式相同,只是参数的顺序相反

3. MySQL基于regexp、rlike的正则匹配查询

REGEXP 不支持通配符"%、_",支持正则匹配规则

REGEXP '网' 等同于 like '%网%'

SELECT * from app_info where appName REGEXP '网';
-- 等同于
SELECT * from app_info where appName like '%网%';

regexp中的 OR : |   

功能:可以搜索多个字符串之一,相当于 or

-- 支持 "|" ‘或’符号,匹配包含“中国”或“互联网”或“大学”的数据,支持叠加多个

SELECT * from app_info where appName REGEXP '中国|互联网|大学';

分页

limit关键字的用法:

LIMIT [offset,] rows

offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)

两种偏移量算法:

(page-1) * rows

page*rows - rows

好像一模一样? 那就是吧

MD5

MD5是一种哈希算法,用来保证信息的完整性。
就一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。不过MD5算法算出来的值也就16个字节(16*8=128,即128位),肯定存在相同的,找到另一个所花时间长短而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DU777DU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值