MySQL必知必会Word文件下载.docx
- 文档编号:18890496
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:30
- 大小:998.95KB
MySQL必知必会Word文件下载.docx
《MySQL必知必会Word文件下载.docx》由会员分享,可在线阅读,更多相关《MySQL必知必会Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
主键的好习惯:
◆不更新主键列中的值
◆不重用主键列的值
◆不在主键列中使用可能会更改的值
SQL是结构化查询语言(StructuredQuery Language)的缩写。
SQL是一种专门来与数据库通信的语言。
MySQL是一种DBMS,即它是一种数据库软件。
DBMS可以分为两类:
1.基于共享文件系统的DBMS
2.基于客户机——服务器的DBMS
MySQL Administrator(MySQL管理器) 是一个图形交互客户机,用来简化MySQL服务器的管理。
下载地址 http:
//
图形交互客户机,用来编写和执行MySQL命令
describe语句:
他对每行字段返回一行,行中包括字段名、数据类型、是否允许null、键信息、默认值以及其他信息
showstatus用于显示广泛的服务器状态信息
showcreatedatabase和showcreatetable分别用来显示创建特定数据库或表的MySQL语句
showgrants用来显示授权用户的安装权限
showerrors和showwarring用来显示服务器错误或警告信息
1.select语句
从一个表或多个表中检索信息
2.检索单个列
select字段fromtablename
未排序数据
如果读者自己实验这个查询,可能会发现显示输出的数据顺序与这里的不同。
如果没有明确查询结果,则返回数据的顺序没有特殊意义,只要返回相同数目的行。
如上的一条简单select语句将返回表中的所有行,数据没有过滤(过滤将得到一个字节),也没有排序
多条SQL语句必须以分号分隔。
SQL语句不区分大小写;
空格被忽略
3.检索多个列
选择多个列时,列名之间用逗号分隔
4.检索所有列
select*fromlimbs;
一般,除非你确实需要表中的每个列,否则最好别使用通配符,虽然使用通配符可能会使你自己省事,但是检索不需要的列通常会降低检索和应用程序的性能。
但是使用通配符可以检索出未知名字的列
正如所见,select返回所有匹配的行。
但是如果你不想要每个行每次都出现,解决办法是使用distinct关键字,此关键字只是MySQL返回不同的值
查询特定的一行或几行
selectlegsfromlimbslimit5;
返回行数不大于5
selectlegsfromlimbslimit5,5;
行数不足,返回行数为实际值
第一个数为开始位置,第二个数为要检索的行数;
带一个值的limit总是从第一行开始,给出的数为返回的行数;
带两个值的limit可以指定从行号为第一个值的位置开始;
×
limit3,4的含义与limit4offset3的含义相同:
从行3开始取4行。
selectlimbs.legsFromlimbs;
这条语句和selectlegsfromlimbs的功能相同;
但是这里指定了一个完全限定的列名;
表名也可以完全限定
selectlimbs.legsFromcookbook.limbs;
排序检索数据
排序数据
下面的SQL语句返回某个数据库表的单个列,但是返回没有特定的顺序;
其实,检索出的数据并不是以纯粹的随机顺序显示的,如果不排序,数据一般将以它在底层表中出现的顺序显示。
这可以是数据最初被添加到表中的顺序。
但是如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收空间的影响。
子句(clause)
SQL语句由子句构成,有些子句是必须的,而有的是可选的。
一个子句通常由一个关键字和所提供的数据组成。
如select语句的from子句;
为了明确的排序用select语句检索出的数据,可以使用orderby子句,该子句取一个或多个列的名字,据此对输出进行排序。
按多个列排序
例如如果要显示雇员清单,可能希望按姓和名排序(首先按照姓排序然后按照名排序)如果多个雇员有相同的姓,这样做很有用。
为了按多个列排序,只要指定列名,列名之间用逗号隔开即可。
在理解多个列排序时,排序完全按照所规定的顺序进行。
对上面的输出,仅在多个行具有相同的legs值时,才按arms排序。
指定排序方向
数据排序不限于升序A~Z,这只是默认的排序顺序,还可以使用orderby子句以降序Z~A排序。
为了以降序排序必须使用desc关键字。
如果打算用多个列排序怎么办?
desc关键字只应用到直接位于其前面的列名
在多个列上降序排序
如果想在多个列上进行降序排序,必须对每个列指定desc关键字
与desc相反的关键字是asc,ascending,在升序排序时可以指定他
区分大小写和排序顺序?
在对文本性的数据进行排序时,A和a相同么?
a位于B之前还是Z之后?
这些问题不是理论问题,而是数据如何设置。
在dictionary字典排序顺序中,A和a相同,这是MySQL和大多数DBMS的默认行为。
这里关键的问题是,如果确实需要改变这种排序顺序,简单的orderby子句做不到,必须请求数据库管理员的帮助。
使用orderby和limit的组合,能够找出一列中legs数目最多的值。
orderby子句的位置
在给出orderby子句时,应该保证他位于from子句之后。
如果使用limit,他必须位于orderby子句之后,使用子句的次序不对将产生错误消息。
过滤数据
使用where子句
数据库表一般包含大量的数据,很少需要检索表中所有行。
通常会根据特定操作或报告的需要提取表数据的子集。
只检索所需数据需指定搜索条件serchcriteria也成为过滤条件filtercondition。
分析:
这条语句从limbs表中检索两个列,但不能返回所有行,返回legs的值为5.
SQL过滤与应用过滤
数据也可以在应用层过滤,为此目的,SQL的select语句为客户机应用检索出超过实际所需的数据,然后客户机代码对返回的数据进行循环,以提取出需要的行。
通常,这种实现并不令人满意,因此对数据库进行了优化,以便快速有效的对数据进行过滤,让客户机应用处理数据库的工作将会极大影响应用的性能,并且使创建的应用完全不具备可伸缩性。
此外如果客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络带快的浪费。
where子句的位置:
在同时使用orderby子句和where子句时,应该让orderby位于where之后,否则将产生错误。
where子句操作符
操作符
说明
=
等于
<
>
不等于
!
小于
小于等于
大于
大于等于
BETWEEN
在指定的两个值之间
检查单个值
不匹配检查
什么时候使用单引号‘’,单引号用来限定字符串,如果将值与串类型的列进行比较,则需要限定引号。
用来与数值列进行比较的值不用引号。
范围值检查
select***from***where***between***and***
为了检查某个范围的值,可使用between操作符
空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。
在一个列不包含值时,被称作包含空值null。
select……from……where……is……null
NULL与不匹配
在通过过滤选择出不具有特定值的行时,你可能希望返回具有null值的行。
但是,不行。
因为未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们,因此在过滤时,一定要验证返回数据中是否确实给出了被过滤列具有null的行。
数据过滤
组合where子句
为了进行更强的过滤控制,MySQL允许给出多个where子句。
这些子句可以两种方式使用:
以and子句的方式或or子句的方式使用。
AND操作符
为了通过不止一个列进行过滤,可以使用AND子句的方式或OR子句的方式使用
✓操作符(operator)用来联接或改变where子句中的子句的关键字。
也成为逻辑操作符(logicaloperator)
OR操作符
OR告诉DBMS匹配任一条件而不是同时匹配两个条件。
如果这里使用的and操作符,则没有数据返回
计算次序
where可以包含任意数目的and和or操作符。
允许者结合以进行复杂和高级的过滤。
但是and和or的组合带来了一个问题——计算次序:
and操作符的优先级高于or
该条语句被理解为任意legs>
2+legs=1andlegs<
2
操作符被错误的组合了
这时候可以使用圆括号明确组合次序
IN操作符
in操作符用来指定范围,范围中的每个条件都可以进行匹配。
in取合法值的由逗号分隔的清单,全部括在圆括号中
降序排序
升序
为什么要使用IN操作符?
其优点如下
✓在使用长的合法选项清单时,In操作符的语法更加清楚而且更直观
✓在使用IN时计算的次序更容易管理
✓IN操作符一般比OR操作符清单执行更快
✓IN的最大优点是可以包含其他select语句,似的能够更动态的建立where子句
NOT操作符
where子句中的not操作符有且只有一个功能,那就是否定它之后的任何条件。
为什么使用not?
对于简单的where子句,使用not却是没有什么优势。
但在更复杂的子句中not是非常有用的。
例如在与in操作符联合使用时,not使找出与条件不匹配的行非常简单。
MysQL中的not
mysQL支持使用not对in、between和exists子句取反,这与多数dbms允许使用not对各种条件取反有很大差别。
用通配符进行过滤
like操作符
怎么搜索产品名中包含文本anvil的所有产品?
用简单的比较操作符肯定不行,必须使用通配符。
通配符(wildcard)用来匹配值的一部分的特殊字符
搜索模式(searchpattern)由字面值、通配符或两者组合构成的搜索条件
通配符本身实际是SQL的where子句中有特殊含义的字符,sql支持几种通配符。
为在搜索句子中使用通配符,必须使用like操作符。
like指示mysQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
谓词操作符何时不是操作符?
答案是在它作为谓词predicate时,从技术上说,like是谓词而不是操作符。
虽然结果是相同的,但是应该对此术语有所了解,一面在sql文档中遇到此术语时不知道。
百分号%通配符
在搜索串中,%表示任何字符出现任意次数
搜索以in开头的值。
%告诉mysql接受in之后的任意字符,不管它有多少字符。
使用两个通配符,位于模式的两端
注意尾部空格:
尾空格可能会干扰通配符匹配。
如在保存词insect后有个空格,则%in不会匹配,解决这一问题的办法是在搜索模式最后增加一个%.一个更好的办法是使用函数去掉首尾空格。
下划线_通配符
下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符
使用通配符的技巧
通配符搜索处理的时间更长即使它很好用——
✓不要过度使用通配符。
如果其他操作符能达到相同的目的,应该使用其他操作符
✓在确实需要使用通配符时,除非绝对有必要,负责不要把它们用在搜索模式的开始处。
把通配符置于搜索模式的开始处,搜索起来时最慢的。
✓仔细注意通配符的位置,如果放错地方,可能不会反悔想要的数据。
用正则表达式进行搜索
正则表达式介绍
正则表达式是用来匹配文本的特殊的串(字符集合)。
如果你想在一个文本文件中提取电话号码,可以使用正则表达式;
如果你想在一个文本块中招到所有重复的单词;
如果你想替换一个页面中的所有URL为这些URL的实际HTML链接
正则表达式用正则表达式语言来建立,正则表达式语言是用来完成刚讨论的所有工作以及更多工作的一种特殊语言。
与任意语言一样,正则表达式具有你必须学习的特殊的语法和指令。
使用MySQL正则表达式
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。
————MySQL仅支持多数正则表达式实现的一个很小的子集
基本字符匹配
除关键字like被代替外,这条语句看上去非常像使用like的语句。
它告诉MySQL:
regexp后所跟的东西做为正则表达式(与文字正文1000匹配的一个正则表达式)处理。
为什么要费力的使用正则表达式?
在刚才的例子中,正则表达式确实没有带来太多好处。
可能会降低性能,不过,看下面例子——
.是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符。
当然这个特殊的例子也可以用like和通配符来完成。
like和regexp在like和regexp之间有一个重要的差别:
第一条语句不反回数据,第二条语句返回,为什么?
like匹配整个列,如果被匹配的文本在列值中间出现,like将不会找到他,相应的行不会被返回,除非使用通配符。
而regexp在列值内进行匹配,如果被匹配的文本是在列值中出现,regexp将会找到他,相应的行业会被返回,这是一个非常重要的差别。
进行or匹配
为搜索了个串之一,或者为这个串,或者为另一个串,使用|
可以给出了个以上的or条件,进行多个匹配
匹配几个字符之一
匹配任何单一字符,但是如果你只想匹配特定的字符,怎么办?
可以通过指定一组用[和]括起来的字符完成,如下
selectAfromBwhereAregexp‘[123]ton’;
[]是另一种形式的or语句,事实上正则表达式[123]ton为[1|2|3]ton的缩写
尽管[123]匹配字符1、2或3ton,但[^123]却匹配除这些字符外的任何东西。
匹配范围
集合可以用来定义要匹配的一个或多个字符。
【0123456789】可以简化为【0~9】,而且范围也不限于完整的集合,【1~3】和【2~9】也是合法的范围。
此外范围不一定只是数值的,也可以【a~z】匹配任意字母字符
范围之后不能有空格
匹配特殊字符
正则表达式语言由具有特定含义的特殊字符构成。
为了匹配特殊字符,必须用\\作为前导。
\\_表示查找_,\\.表示查找.
这种处理就是所谓的转义(escaping)
\\也用来引用元字符
元字符
\\f
换页
\\n
换行
\\r
回车
\\t
制表
\\v
纵向制表
匹配\为了匹配反斜杠字符本身需要使用\\\
\或\\?
多数正则表达式实现使用单个反斜杠转移特殊字符,以便能够使用这些字符本身。
但Mysql要求了个反斜杠(Mysql自己解释一个,正则表达式库解释另一个)。
匹配字符类
存在找出你自己经常使用的数字、所有字母字符狐火所有数字字母字符等的匹配。
为更方便的工作,可以使用预定义的字符集,成为字符类characterclass
类
【:
alnum:
】
任意字母和数字a~zA~Z0~9
alpha:
任意字符a~zA~Z
blank:
空格和制表符\\t
cntrl:
ASCII控制字符0~31和127
digit:
任意数字
graph:
与【:
print:
】相同,但不包括空格
lower:
任意小写字母
任意可打印字符
punct:
既不在【:
】又不在【:
】的任意字符
space:
包括空格在内的任意空白字符
upper:
任意大写字母
xdigit:
任意十六进制数字
匹配多个实例
目前为止使用的所有正则表达式都试图匹配单词出现。
如果存在一个匹配,该行被检索出来,如果不存在,检索不出任何行,但有时候需要对匹配的数目进行更强的控制,例如你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s等
重复元字符
*
0个或多个匹配
+
1个或多个匹配等于{1,}
?
0个或1个匹配等于{0,1}
{n}
指定数目的匹配
{n,}
不少于指定数目的匹配
{n,m}
匹配数目的范围(m不超过255
】表示匹配任意数字,{9}表示它前面的任意字符/数字出现9次
定位符
简单的正则表达式测试
有匹配时返回1,无匹配时返回0
创建计算字段
拼接字段
在Mysql的select语句中,可以使用concat()函数来拼接两个列。
Mysql的不同之处:
多数DBMS使用+或||来实现拼接,而Mysql用concat()函数拼接。
从上述输出的结果看到,select语句返回包含上述4个元素的单个列(计算字段),
使用别名
将计算字段替换为指定别名(alias),用as关键字赋予
别名的其他用途:
在实际的表列名中包含不符合规定的字符时可以重新命名它,在原来的名字含混或容易误解时扩充它等等。
执行算数计算
使用select进行简单的测试
使用数据处理函数
RTrim()和Trim()可以去除串尾和串首的空格。
upper()函数将文本转换为大写
常用的文本处理函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 必知必会
![提示](https://static.bdocx.com/images/bang_tan.gif)