MySQL学习笔记补充知识点

MySQL学习笔记补充知识点


用正则表达式进行搜索

正则表达式是用来匹配文本的特殊的串

所有的种类的程序设计语言,文本编辑器,操作系统等都支持正则表达式

使用MySQL正则表达式

mysql仅支持多数正则表达实现的一个很小的子集

基本字符匹配

正则表达是应在regexp后

select pro_name from prooducts where pro_name regexp ‘1000’ order by prod_name;

上面例子就是匹配pro_name列中含有1000,1000就是基本字符

其实使用正则表达式主要是看在正则表达有强大的匹配的功能,可能导致性能下降

上面的例子中regexp看着很像like

进行OR匹配

为搜索两个字符串之一,可以使用|

如:select prod_name from prducts where pro_name regexp ‘1000|2000’

两个以上的OR条件,X|X|X

匹配几个字符之一

符号为[ ],在符号中任何一个

select prod_name from prducts where pro_name regexp ‘[121]tom’;

也是‘1|2|3 tom’的缩写

匹配范围

0到9的匹配为[0-9],类推1到5匹配为[1-5],类推a到z匹配为[a-z]…[A-Z],这些在正则表达式中

匹配特殊字符

为了匹配特殊字符,必须用\为前导,\ \ -表示查找 -

匹配字符类

存在找出自己经常使用的数字,所有字母字符或所有数字字母字符等的匹配,为更方便工作,可以使用预定义的字符集,称为字符类

[:alnum:] 任意字母和数字[a-zA-Z0-9]

[:alpha:] 任意字符[a-zA-Z]

[:blank:] 空格和制表[\t]

[:cntrl:] ASCII控制字符(ASII 0到31)

[:digit:] 任意数字[0-9]

[:graph:] 与[:print:]相同,但不包括空格

[:lower:] 任意小写字母[a-z]

[:print:] 任意可打印字符

[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符

[:space:] 包括空格在内的任意空自字符(\f)

[:upper:] 任意大写字母[A-Z]

[:xdigit:] 任意十六制数字[a-fA-F0-9]

匹配多个实例

/* 0个或者多个匹配

/+ 1个或多个匹配

? 0个或1个匹配

{n} 指定数目的匹配

{n, } 至少为指定数目

{n,m} 在指定数量之间

定位符

^ 文本的开始

$ 文本的结尾

[[:<:]] 词的开始

[[:>:]] 词的结尾


使用数据处理函数

函数

与其他计算机一样,SQL支持利用函数处理数据,函数没有SQL的可移植物

性强,多数SQL语句是可移植,在SQL实现之间有差异时,不难处理,而函数性却不强,几乎每种主要的BDMS都支持其他实现不支持的函数,有时候差异还很大

使用函数应该保证做好代码注释


全文本搜索

并非所有引擎都支持全文本搜索

像like和正则表达都可以进行匹配,非常有用,但存在几个重要限制

性能–统配符和正则表达式匹配通常要求MySQL尝试要求匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。

明确控制一一使用通配符和正则表达式匹配,很难(而且并不总是能明确地控制匹配什么和不匹配什么。例如,指定一个词必须匹配,一个词必须不匹配,而一个词仅在第一个词确实匹配的情况下才可以史配或者才可以不匹配

智能化的结果一一虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索,但它们都不能提供一种智能化的选择结果的方法。例如,一个特殊词的搜索将会返回包含该词的所有行,而不区分包含单个匹配的行和包含多个匹配的行(按照可能是更好的匹配来排列它们)类似,一个特殊词的搜索将不会找出不包含该词但包含其他相关词的行。

所有这些限制以及更多的限制都可以用全文搜索来解决,使用全文搜索时,Mysql不需要分析和处理每个词,会创建指定列中各词的一个索引,搜索可以针对这些词进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值