再见西城 发表于 2015-1-16 20:12:57

发布MySQL中的字符串形式婚配

解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。择要:本文先容了有关字符串形式婚配的有关常识。尺度的SQL形式婚配是SQL言语的尺度,能够被别的干系数据库体系承受。扩大正轨表达式形式婚配是依据Unix体系的尺度开辟了,一样平常只可以使用在MySQL上,可是其功效要比尺度的SQL形式婚配更强。
MySQL供应尺度的SQL形式婚配,和一种基于象Unix有用程序如vi、grep和sed的扩大正则表达式形式婚配的格局。
尺度的SQL形式婚配
SQL的形式婚配同意你利用“_”婚配任何单个字符,而“%”婚配恣意数量字符(包含零个字符)。在MySQL中,SQL的形式缺省是疏忽巨细写的。上面显现一些例子。注重在你利用SQL形式时,你不克不及利用=或!=;而利用LIKE或NOTLIKE对照操纵符。
比方,在表pet中,为了找出以“b”开首的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"b%";

+--------+--------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+------------+
|Buffy|Harold|dog|f|1989-05-13|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
+--------+--------+---------+------+------------+------------+
为了找出以“fy”开头的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"%fy";

+--------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+-------+
|Fluffy|Harold|cat|f|1993-02-04|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+--------+--------+---------+------+------------+-------+
为了找出包括一个“w”的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"%w%";

+----------+-------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+----------+-------+---------+------+------------+------------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
|Whistler|Gwen|bird|NULL|1997-12-09|NULL|
+----------+-------+---------+------+------------+------------+
为了找出包括恰好5个字符的名字,利用“_”形式字符:
mysql>SELECT*FROMpetWHEREnameLIKE"_____";

+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
扩大正则表达式形式婚配
由MySQL供应的形式婚配的其他范例是利用扩大正则表达式。当你对这类形式举行婚配测试时,利用REGEXP和NOTREGEXP操纵符(或RLIKE和NOT
RLIKE,它们是同义词)。
扩大正则表达式的一些字符是:
“.”婚配任何单个的字符。
一个字符类“[...]”婚配在方括号内的任何字符。比方,“”婚配“a”、“b”或“c”。为了定名字符的一个局限,利用一个“-”。
“”婚配任何小写字母,而“”婚配任何数字。
“*”婚配零个或多个在它后面的器材。比方,“x*”婚配任何数目的“x”字符,“*”婚配的任何数目的数字,而“.*”婚配任何数
量的任何器材。
正则表达式是辨别巨细写的,可是假如你但愿,你能利用一个字符类婚配两种写法。比方,“”婚配小写或年夜写的“a”而“”匹
配两种写法的任何字母。
假如它呈现在被测试值的任何中央,形式就婚配(只需他们婚配全部值,SQL形式婚配)。
为了定位一个形式以便它必需婚配被测试值的入手下手或开头,在形式入手下手处利用“^”或在形式的开头用“$”。
为了申明扩大正则表达式怎样事情,下面所示的LIKE查询鄙人面利用REGEXP重写:
为了找出以“b”开首的名字,利用“^”婚配名字的入手下手而且“”婚配小写或年夜写的“b”:
mysql>SELECT*FROMpetWHEREnameREGEXP"^";

+--------+--------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+------------+
|Buffy|Harold|dog|f|1989-05-13|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
+--------+--------+---------+------+------------+------------+
为了找出以“fy”开头的名字,利用“$”婚配名字的开头:
mysql>SELECT*FROMpetWHEREnameREGEXP"fy$";

+--------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+-------+
|Fluffy|Harold|cat|f|1993-02-04|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+--------+--------+---------+------+------------+-------+
为了找出包括一个“w”的名字,利用“”婚配小写或年夜写的“w”:
mysql>SELECT*FROMpetWHEREnameREGEXP"";

+----------+-------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+----------+-------+---------+------+------------+------------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
|Whistler|Gwen|bird|NULL|1997-12-09|NULL|
+----------+-------+---------+------+------------+------------+
既然假如一个正轨表达式呈现在值的任何中央,其形式婚配了,就不用再先前的查询中在形式的两方面安排一个通配符以使得它婚配全部值,
就像假如你利用了一个SQL形式那样。
为了找出包括恰好5个字符的名字,利用“^”和“$”婚配名字的入手下手和开头,和5个“.”实例在二者之间:
mysql>SELECT*FROMpetWHEREnameREGEXP"^.....$";

+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
你也能够利用“{n}”“反复n次”操纵符重写先前的查询:
mysql>SELECT*FROMpetWHEREnameREGEXP"^.{5}$";

+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
总结
本先容了有关字符串形式婚配的有关常识。尺度的SQL形式婚配是SQL言语的尺度,能够被别的干系数据库体系承受。扩大正轨表达式形式婚配
是依据Unix体系的尺度开辟了,一样平常只可以使用在MySQL上,可是其功效要比尺度的SQL形式婚配更强。
业界普遍的声音认为:“MySQL是一个可靠的数据库系统,MySQL学习教程无论是在嵌入式或大型群集系统的部署中,还是在基于Web的应用程序领域。

老尸 发表于 2015-1-18 18:46:29

入门没那么困难,精通没那么容易

小妖女 发表于 2015-1-25 12:10:04

索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。

山那边是海 发表于 2015-2-2 22:03:16

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

不帅 发表于 2015-2-8 10:49:02

我们学到了什么?思考问题的时候从表的角度来思考问

再见西城 发表于 2015-2-25 09:38:49

比如日志传送、比如集群。。。

莫相离 发表于 2015-3-7 19:31:12

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

蒙在股里 发表于 2015-3-15 13:04:16

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

海妖 发表于 2015-3-22 01:11:26

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
页: [1]
查看完整版本: 发布MySQL中的字符串形式婚配