一点事.docx
- 文档编号:11304560
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:36
- 大小:123.99KB
一点事.docx
《一点事.docx》由会员分享,可在线阅读,更多相关《一点事.docx(36页珍藏版)》请在冰豆网上搜索。
一点事
考试中插入、更新、删除至少有一个
第一章SQLServer2008中的对象
SQLServer2008简介:
SQLServer2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQLServer版本。
这个平台有以下特点:
可信任的——使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。
高效的——使得公司可以降低开发和管理他们的数据基础设施的时间和成本。
智能的——提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。
1.1数据库的构成
数据库=数据+数据之间的联系
现在的数据库不仅包括数据,还包括数据与数据之间的联系。
具体来说,包括数据、联系、管理、安全控制等。
1.2数据库对象概述
在RDBMSSQLServer中,主要包括如下数据库对象:
数据库、事务日志、表、文件组、图表、视图、存储过程、索引、报表、角色、用户等。
1.2.1数据库对象
在SQLServer中,数据库是顶层对象,其它对象几乎都是它的子对象。
1、master——主数据库
用于存储系统表,不能删除。
2、model——模板数据库
新建数据库的模板。
不能删除
1.2.2事务日志
事务日志是一个与数据库文件分开的文件。
它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。
事务日志还称作前滚日志或重做日志。
事务日志是备份和恢复的重要组件,也是使用SQLRemote所必需的。
注:
Remote是一款远程控制服务器。
1.2.3表:
表即是满足一定条件的一个二维表。
是数据库中存储数据库的对象。
以下是与表相关的对象:
索引、触发器、约束(规则)
1.2.4模式:
模式是数据库与其它的子对象之间一个代理(虚拟对象)。
如数据库的默认模式是dbo,它表示数据库本身。
1.2.5文件组:
即一个数据库所包括的文件群。
一般一个数据库的所有数据(非日志文件)都存储在一个文件中,但也可以把它分成若干个文件存放,即为文件组。
1.2.6图表:
此处的数据库图表,相似于E-R图,即数据库设计中的可视化表示。
注:
需要表之间有联系才能显示。
1.2.7视图:
视图即虚拟表。
注意视图的功能和对操作的影响。
1.2.8存储过程:
存储过程(sprocs)即SQL内部专用程序。
优点:
程序小,传输快,速度快,安全性高(将过程封装),可重用
1.2.10用户和角色:
用户:
是使用数据库的对象:
角色:
是使用数据库的权限
1.2.11规则:
规则与约束相似。
不同之处如下:
规则可用于定义用户自定义类型上的限制,而约束只能用于特定表的元数据片段。
1.2.12默认值:
即表中某些字段在默认情况下给出的值。
1.2.13用户自定义数据类型
自创数据类型,相似于C语言中的结构体。
1.3SQLServer数据类型
1.3SQLServer数据类型(续)
1.3SQLServer数据类型(续)
注意:
NULL它是一个不确定的内容
1.4SQLServer对象标识符
1.4.1需命名的对象
存储过程——Storedprocedure视图——View表——Table
1.4.2命名规则
SQLServer2000的数据库对象名字由1-128个字符组成,不区分大小写。
在一个数据库中创建了一个数据库对象后,数据库对象的全名应该由服务器名、数据库名、拥有者名和对象名这四个部分组成,格式如下:
[[[server.][database].][owner_name].]object_name
命名必须都要符合标识符的规定。
在实际引用对象时,可以省略其中某部分的名称,只留下空白的位置。
实例的命名习惯
在SQLServer2000中默认实例的名字采用计算机名,实例的名字一般由计算机名字和实例名字两部分组成。
总之,正确掌握数据库的命名和引用方式是用好SQLServer2000的前提,也有助于用户理解SQLServer2000中的其他内容。
第2章工具
本章主要介绍SQLServer2008工具。
2.3SQLServerManagementStudio
作为数据库管理工具,它是比较好的工具,主要功能如下:
1、创建、编辑和删除数据库及数据库对象;2、管理调度任务;3、…
2.3.1启动
1、服务器类型2、服务器名称3、身份验证类型
2.3.2查询编辑器
主介绍查询编辑器的功能和使用。
2.4BIDS
VS开发工具
2.5SQLServer集成服务(SSIS)
数据转换服务
2.6ReportingServices
报表服务器
第3章高级查询
本章主要对SQLServer2008的查询功能进行全面介绍。
3.1子查询
子查询即在一个查询的某部分用到的另一个查询,如条件子查询。
3.2嵌套子查询
例3.1:
查询每门成绩都大于或等于80分的同学信息。
注:
本例使用In来完成。
用in实现:
select*fromsdb.dbo.studentwheresnonotin
(selectsnofromsdb.dbo.scwherescore<80)(运行次数较多)
如:
100为学生表的记录数,10000,5000。
用in就是10000+5000*100
用exist就是5000*(50)
用exist实现:
select*fromsdb.dbo.studentwherenotexists
(select*fromsdb.dbo.sc
wherestudent.sno=sc.snoandscore<80)(运行次数较少,效率高)
练习:
查询所有成绩都不及格的学生信息。
3.2嵌套子查询(续)
ANY,SOME,ALL的使用。
例3.2:
查询比张三所有成绩都高的学生信息;
查询比张三某门成绩高的成绩信息。
3.3相关子查询
相关子查询与嵌套子查询的区别:
在嵌套子查询中,内部查询只处理一次信息(结果)即被传出,以便被外部查询使用。
在相关子查询中,信息是双向进行的。
内部查询根据外部查询提供的信息执行,反之同理。
3.3.1相关子查询的工作方式
相关子查询执行过程如下:
(1)外部查询获得一条记录并将其传入内部查询;
(2)基于传入的值执行内部查询;
(3)外部查询利用内部查询的结果完成自己的工作。
3.3.2Where子句中的相关子查询
例3.3:
查询每个同学的最低分及其相应的课程名。
selectdistincts1.Sno,Course.Cname,s1.Score
fromdbo.CourseJoindbo.scS1onourse.Cno=s1.Cno
whereScore=
(selectMIN(s2.score)fromdbo.SCs2wheres2.Sno=S1.sno)
3.3.3Select列表中的相关子查询
例3.4:
查询每个同学的学号、姓名和平均分。
命令:
SelectdistinctStudent.Sno,student.sname,
(selectAVG(sc.score)fromdbo.SCwhereSC.Sno=Student.Sno)as"min_score"
fromdbo.Student
3.4派生表(内联视图)
派生表即是在查询语句的From语句中出现通过子查询结果产生的表。
例3.5:
查询同时选择了”JK01”与”JK04”两门课程的学生信息。
Selectdistincts.Sno,s.Sname,s.Sexfromdbo.StudentS
join(selectsc.*fromdbo.SCwhereSC.Cno='JK01')Sc1
Ons.Sno=Sc1.Sno
joindbo.SCassc2
ons.Sno=sc2.Sno
wheresc2.Cno='JK04'
其中Sc1即为派生表。
3.5Exists运算符
类似于In,但须注意两者的区别。
区别:
(1)语法上In之前有字段名,而Exists无;
(2)使用IN时不需内外表关联,而使用Exists是需要;
(3)Exists效率比IN高。
例3.6:
用Exists查询例3.1
3.6Intersect(交)和Except(差)
特殊运行算符:
Union——去重复并
UnionAll——不去重复并
Except——差
Intersect——交
3.6.3Except和Intersect与Exists和NotExists的比较
作业:
请同学完成。
注意:
请用实例说明。
3.7通用表表达式(CTE)
CTE是相似于视图,但功能强于视图的临时表。
定义CTE的语法格式如下:
WithCTE名(列名表)as(查询语句)
3.7通用表表达式(CTE)(续)
例3.6使用CTE完成例3.5的查询。
WithSc1As
(selectsc.*fromdbo.SCwhereSC.Cno='JK01')
Selectdistincts.Sno,s.Sname,s.Sexfromdbo.StudentS
joinSc1
Ons.Sno=Sc1.Sno
joindbo.SCassc2
ons.Sno=sc2.Sno
wheresc2.Cno='JK04'
注意,CTE中不能使用以下结构:
Computer与ComputerBy
OrderBy
Into
ForXml、ForBrowse、Option等
但它主要用于递归查询。
3.8递归查询
递归查询即查询的段代码直接或间接地调用自己时称为递归查询。
递归在层次数据结构中用得较多。
3.9合并
这里的合并是指,合并操作。
3.10利用外部调用完成复杂操作
即通过编程语言使用Select来编程进行复杂查询。
3.11性能考虑
1.合理使用索引
索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。
索引的使用原则如下:
●对聚集索引使用整型键。
另外,在唯一列、非空列或identity列上创建聚集索引可以获得性能收益。
●在查询经常用到的所有列上创建非聚集索引。
●在经常进行连接,但没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
●在频繁进行排序或分组(即进行groupby或orderby操作)的列上建立索引。
●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。
例如在用户表的“性别”列上只有“男”与“女”两个不同值,因此不要建立索引。
如果建立索引反而会严重降低更新速度。
●如果要排序的列有多个,可以在这些列上建立复合索引(compoundindex)。
●当数据库表更新大量数据后,删除并重建索引可以提高查询速度。
2.避免或简化排序
应当简化或避免对大型表进行重复的排序。
当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。
以下是一些影响因素:
●索引中不包括一个或几个待排序的列;
●groupby或orderby子句中列的次序与索引的次序不一样;
3.避免对大型表进行全表顺序扫描
在嵌套查询中,对表的顺序扫描会使查询效率急剧下降。
避免这种情况的主要方法是对连接的列建立索引。
尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。
如下面的查询将强迫对orders表执行顺序扫描:
select*fromorderswhere(customer_num=104 andorder_num>1001)ororder_num=1008
虽然在customer_num和order_num上建了索引,但是在上面的语句中优化器还是会使用顺序扫描整个表。
因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:
select*fromorderswherecustomer_num=104 andorder_num>1001
unionh
select*fromorderswhereorder_num=1008h
这样就能利用索引来处理查询。
4.避免使用相关的子查询
一个列同时在主查询和where子句中的查询中出现,很可能当主查询中的列值改变之后,子查询必须重新查询一次。
查询嵌套层次越多,效率越低,因此应当尽量避免子查询。
如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
5.避免使用通配符匹配
like关键字支持通配符匹配。
但这种匹配特别耗费时间。
例如:
select*fromcustomerwherezipcodelike “98___”
即使在zipcode列上建立了索引,在这种情况下也还是采用顺序扫描的方式。
如果把语句改为
select*fromcustomerwhere zipcode>“98000”,在执行查询时就会利用索引来查询,大大提高速度。
6避免在where子句使用数据转换和串操作等函数操作
例如语句:
select*from users where rtrim(username)=‘nametest’,在where子句中使用了函数,因而这个语句不会使用索引,而会进行全表扫描。
应该改成:
select*from users where username=‘nametest’
7.避免在经常被更新的列建立索引,会严重影响性能。
因为每次更新操作,所有的索引都必须做相应的调整。
另外,所有的分页操作都被记录在日志中,这也会增加I/O操作。
8.避免在经常更新的列上建立聚集索引。
因为这会引起整行的移动。
9.尽量在where子句中少用OR和IN。
可以考虑将其使用Union分成几个子查询。
10.避免在where子句中使用NOT、<>、或!
=运算符。
因为这会引起全表扫描。
书P58表3-1总结了几种不同情况的查询优化方法。
3.12本章小节
本章主要介绍了各种查询。
第4章XML集成
本章主要对SQL支持的XML进行全面介绍。
请先阅读《XML入门经典》
4.1XML数据类型
模式集合
强制约束
XML数据类型方法
第5章数据库设计
本章主要介绍范式及规范化相关内容。
5.1规范化相关
1NF:
2NF:
3NF:
BCNF:
4NF:
5NF:
注:
实际应用中一般只要求表达到3NF。
5.1.1相关理论
1、实体
2、关系
关系应满足的条件:
一个表只能用于描述一个实体;
行必须唯一;
列和行顺序无关。
5.1.2规范化方法
1NF:
消除重复记录,创建主键。
2NF:
在第一范式的基础上,使之满足每一列必须依赖于整个键。
3NF:
在2NF的基础上,使任何列不能与任何非主键列有依赖关系,同时不能有派生的数据。
派生数据是指从其它数据推导出的数据,如年龄与出生日期的关系。
5.2关系(联系)
一对一
一对多
多对多
5.3图表
ERD(实体联系图)是一个很重要的数据库逻辑模式设计工具。
可以完成如下工作:
1、创建逻辑模型
2、完成从逻辑模型到物理模型的转换
5.3.1几种关系类型
1、标识关系
标识关系是指父表中被引用的列是引用子表的部分或全部主键,即子表由父表“标识”
2、非标识关系
非标识关系就是主表主键并非子表的主键列。
在创建外键时创建,目的是将引用字段限制在一定范围内。
5.3.2实体框
这里的ER工具,可以在实体框中定义数据类型、主外键等。
注意:
圆角矩形表示该关系被引用。
P110图5-2以框框形式画出来
5.3.3关系线
实线:
标识关系
虚线:
非标识关系
作业:
请查阅资料并绘制学生课E-R图。
(包括学生、课程、选课和教师等实体)
5.4逻辑模型设计与物理模型设计
5.4.1逻辑模型的功能:
1、是对具体问题的抽象,即在高层次上标识实体;
2、通过对具体问题的抽象有效表达关系之间的规则;
3、逻辑建模是与客户沟通的重要工具;
4、是需求分析阶段的主要成果。
5.4.2逻辑模型的组成
1、结构
结构是指逻辑设计中涉及实际数据存储概念的部分,类似于表。
2、约束
约束是对数据有效性的限制。
包括:
数据类型、主键、外键、Check约束、Unique约束等。
3、规则
规则是对约束的具体描述。
如:
性别为男或女即为一个规则。
5.6子类别
子类别也称为子类型或超类型。
例:
P118
5.6.1子类别的类型
1、独占式
P119图5-9
2、非独占式
P119图5-10
5.6.2子类别的功能
超强数据模型的描述能力;
提高查询效率
增强数据库的可扩展性
5.8反规范化
反规范化就是为提高查询效率而降低规范化级别的一种方式。
注意:
反规范化是有条件的。
5.9通过分区方法进行扩展
分区的主要目的是扩展存储空间。
分区规则:
1、同用同存
2、统筹访问
5.10SQLServer关系图工具
处理约束:
主键
外键
Check约束
5.11日期列的处理
需将日期时间类型进行有效转换,以提高数据处理效率。
5.12小结
本章主要介绍了规范化的知识以及数据库模式设计的相关内容。
第6章核心存储与索引结构
本章主要介绍数据库的物理存储结构与索引结构。
索引为数据库系统提供了额外的方式查找数据并快速定位所需数据的物理位置。
在数据库中,索引是高效和快速地访问和维护数据的关键。
6.1存储
SQLServer中,可以把数据看成是某种简单层次结构的,这样,数据的查询处理将比较容易。
6.1.1数据库(DB
数据库是存储定义的最高级别,也是加锁对象中的最高级别。
什么是锁,X锁,S锁?
6.1.2文件
一个数据库文件包括以下文件:
1、数据库主文件——*.mdf
2、数据库扩展文件——*.ndf
3、数据库日志文件——*.ldf
注意:
扩展文件可与主文件不在同一磁盘分区。
完整的数据集就包括:
数据库文件与日志文件。
6.1.3区段
区段是用来为表和给定文件中的索引分配空间的基本存储单元。
一个区段由8个连续的64KB数据页组成。
基于区段的数据存储方式为:
数据以区段为单位存储,当一个区段存储完以后,自动将新的一条记录存入下一个新区段中(所占空间并非记录的实际大小,而是整个区段)
使用区段的优点是系统通过预先的固定空间分配模式节约存储空间分配的开销。
缺点:
可能会有一条记录占用一个区段而造成空间浪费。
6.1.4页
一区段=8页(1页=64KB)
即页是区段中存储空间的分配单元。
其存储方式为,一页可以存多行(条记录)数据,但一条记录只能存入一页。
而每一页中的行数根据记录的大小确定。
注意:
这里的记录可以是数据、索引和其它对象。
1、数据页
即存储表中实际数据的页。
2、索引页
主要用于存储索引的指针文件。
3、BLOB页
对于BLOB(大数据类型)的数据,其最大可达2GB,所以对于该种数据,系统将为行分配多个BLOB页,每一页包括数据和指针(指向下一页)。
6.1.5行
1页=8行(1行=8KB)
注意:
1行最多分为1024列
6.1.6全文目录
全文目录是全文索引的逻辑分组,它与存储单元无关。
全文目录是数据的管理和查询的重要工具。
6.1.7文件流
文件流是一种超大数据类型的存储方式,它是将数据直接存储在NTFS目录中,然后通过SQL系统协调管理。
注意:
文件流并没把数据存入BLOB页中。
6.2索引
SQLServer中的方式:
二进制:
根据字符的二进制数字表示进行排序,如ASCII码。
字典顺序:
即按字母读音顺序排序。
6.2.1B树
1、B树的概念
2、使用B树可以将关系型数据转换成类似层次型的方式来进行查询,从而提高查询的效率。
注意:
当向表中插入新记录时,要保持表B树的平衡。
6.2.2在SQLServer中访问数据
1、表扫描
表扫描即对表进行顺序查询。
当表中的数据量(行数)很少时,使用表扫描效率比较高。
2、使用索引
对数据量(行数)较多的表,通过索引查询效率比较高。
(表扫描与使用索引的区别联系
注意:
在Where中使用Exists,由于只要找到匹配的记录即停止查找,因此一定条件下,可以提高查询效率。
6.2.3索引类型和索引导航
1、聚集索引
聚集索引是按物理顺序存放的记录指针的索引。
每个表只能创建一个唯一的聚集索引。
但是,在表中添加新记录时,新记录要根据其在表中的物理顺序位置进行插入,所以影响插入效率。
2、堆上的非聚集索引
堆在的非聚集索引相似于聚集索引,但它是以堆的数据结构方式创建的索引。
与聚集索引的区别如下:
结构上:
其叶级不是数据,而是指向数据的指针。
它由索引指向的特定行的区段、页和行偏移量组成。
访问方式上:
由于数据之间没有链接,堆上的非聚集索引可能要经过单独几次从同一个页中获取数据;而聚集索引因为是物理排序的,所以对于一个页,只需访问一次就可以获取到所有数据。
3、聚集表上的非聚集索引
索引方式:
先用非聚集索引找到满足条件的连续数据范围,然后用聚集索引进行查找,从而利用两种查询的优点进行快速查询。
6.3创建、修改和删除索引
和其它对象的创建方法相似,可以通过创建约束时作为隐含对象创建和通过命令方式创建。
6.4索引的选择
聚集索引:
当相关列经常作为范围查询的对象时,即经常使用Between或Or、Groupby以及Min、Max、Sum等进行查询,如果使用聚集索引效率会相当高。
非聚集索引:
对数据库存在大量的不连续的顺序插入,因会发生页拆分而消耗大量的时间。
6.5维护索引
索引的维护主要处理两个方面的问题:
即页拆分和碎片。
碎片是在数据库增长和页拆分过程中产生的。
碎片的处理与操作系统相似。
具体命令是:
sys.dm_db_index_physical_stats(…)
6.6本章小结
1、聚集索引比非聚集索引快;
2、选择性相当高时(95%以上)才用非聚集索引;
3、索引会降低插入、更新和删除的速度;
4、索引会占用数据库空间;
5、只有当查询与索引关键字相关时才会使用索引。
索引为数据库系统提供了额外的方式查找数据并快速定位所需数据的物理位置。
在数据库中,索引是高效和快速地访问和维护数据的关键。
第8章视图
本章主要介绍视图的概念及创建方法。
8.1创建视图
CreateView视图名
As
Select…..
8.2复杂的视图
复杂视图即使用多表进行了的复杂查询创建的视图。
8.2.1使用视图更新数据
1、修改有有联接的表创建的视图
对于用一个单表创建的视图,完全可以当表一样进行数据更新、插入和删除;
对于使用多个表创建的视图,如果需要对视图中的数据进行更新,则需使用InsteadOf触发器(InsteadOf触发
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一点