模糊查找
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位),肯定存在相同的,找到另一个所花时间长短而已