SQL-Server-2012数据库开发教程第7章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《SQL-Server-2012数据库开发教程第7章.ppt》由会员分享,可在线阅读,更多相关《SQL-Server-2012数据库开发教程第7章.ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQLServer2012SQLServer2012数据库开发教程数据库开发教程数据库开发教程数据库开发教程(第(第(第(第33版)版)版)版)授课教师:授课教师:职务:职务:第第7章章规则和索引规则和索引课程描述课程描述课程描述课程描述规则和索引是规则和索引是规则和索引是规则和索引是SQL ServerSQL ServerSQL ServerSQL Server中常用中常用中常用中常用的对象,规则可以指定表中数据的对象,规则可以指定表中数据的对象,规则可以指定表中数据的对象,规则可以指定表中数据需要满足的条件,索引则可以提需要满足的条件,索引则可以提需要满足的条件,索引则可以提需要满足的条件
2、,索引则可以提高查询数据的效率。俗话说没有高查询数据的效率。俗话说没有高查询数据的效率。俗话说没有高查询数据的效率。俗话说没有规矩不成方圆,如果没有规则来规矩不成方圆,如果没有规则来规矩不成方圆,如果没有规则来规矩不成方圆,如果没有规则来约束,表中就有可能保存一些不约束,表中就有可能保存一些不约束,表中就有可能保存一些不约束,表中就有可能保存一些不符合逻辑的垃圾数据,例如工资符合逻辑的垃圾数据,例如工资符合逻辑的垃圾数据,例如工资符合逻辑的垃圾数据,例如工资为为为为-5000-5000-5000-5000,年龄为,年龄为,年龄为,年龄为400400400400,性别为马,性别为马,性别为马,性
3、别为马等。这种数据会给应用程序带来等。这种数据会给应用程序带来等。这种数据会给应用程序带来等。这种数据会给应用程序带来混乱。而索引则类似于图书的目混乱。而索引则类似于图书的目混乱。而索引则类似于图书的目混乱。而索引则类似于图书的目录(实际上索引的情况要比目录录(实际上索引的情况要比目录录(实际上索引的情况要比目录录(实际上索引的情况要比目录复杂得多),创建索引可以帮助复杂得多),创建索引可以帮助复杂得多),创建索引可以帮助复杂得多),创建索引可以帮助数据库引擎快速的查询数据。这数据库引擎快速的查询数据。这数据库引擎快速的查询数据。这数据库引擎快速的查询数据。这两个对象虽然不是必须的,但合两个对
4、象虽然不是必须的,但合两个对象虽然不是必须的,但合两个对象虽然不是必须的,但合理地设计规则和索引对于创建完理地设计规则和索引对于创建完理地设计规则和索引对于创建完理地设计规则和索引对于创建完善、高效的数据库应用程序是很善、高效的数据库应用程序是很善、高效的数据库应用程序是很善、高效的数据库应用程序是很有帮助的。有帮助的。有帮助的。有帮助的。本章知识点本章知识点7.1 7.1 规则规则 7.2 7.2 索引索引 7.1规则规则7.1.1 7.1.1 规则的概念规则的概念 7.1.2 7.1.2 创建规则创建规则 7.1.3 7.1.3 查看规则查看规则 7.1.4 7.1.4 绑定规则绑定规则
5、7.1.5 7.1.5 解除绑定规则解除绑定规则 7.1.6 7.1.6 删除规则删除规则 7.1.1规则的概念规则的概念p规则(规则(RulesRules)是用于执行一些与检查约束相同)是用于执行一些与检查约束相同的功能。检查约束比规则更简明,一个列只能的功能。检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束。应用一个规则,但是却可以应用多个检查约束。p检查约束可以在检查约束可以在CREATE TABLECREATE TABLE语句中定义,而语句中定义,而规则作为独立的对象创建,然后绑定在指定的规则作为独立的对象创建,然后绑定在指定的列上。列上。p规则也是维护数据库中
6、数据完整性的一种手段,规则也是维护数据库中数据完整性的一种手段,使用它可以避免表中出现不符合逻辑的数据,使用它可以避免表中出现不符合逻辑的数据,例如工资小于例如工资小于0 0。7.1.2创建规则创建规则p使用使用CREATE RULECREATE RULE语句可以创建规则,语句可以创建规则,其语法结构如下:其语法结构如下:CREATE RULE CREATE RULE.AS AS p规则表达式中可以包含算术运算符、关规则表达式中可以包含算术运算符、关系运算符和谓词(例如系运算符和谓词(例如ININ、LIKELIKE、BETWEENBETWEEN等)。等)。【例例7-1】p创建一个规则创建一个规
7、则SexRuleSexRule,指定变量,指定变量sexsex的取值只能为的取值只能为 男男 或或 女女,代码如下:,代码如下:CREATE RULE SexRuleCREATE RULE SexRuleAS sex IN(AS sex IN(男男,女女)【例例7-2】p创建一个规则创建一个规则WageRuleWageRule,指定变量,指定变量wagewage的取值范围为的取值范围为050000050000,代码如下:,代码如下:CREATE RULE WageRuleCREATE RULE WageRuleAS wage BETWEEN 0 AND 50000 AS wage BETWEE
8、N 0 AND 50000 7.1.3查看规则查看规则p打开打开SQL Server Management SQL Server Management StudioStudio,在对象资源管理器中展,在对象资源管理器中展开要管理的数据库,例如开要管理的数据库,例如HrSystemHrSystem。再展开。再展开“可编程性可编程性”/“规则规则”,可以查看选择数,可以查看选择数据库中的所有规则对象。如果还据库中的所有规则对象。如果还没有创建规则对象,则没有创建规则对象,则“规则规则”节点下没有子节点。右击一个规节点下没有子节点。右击一个规则对象,在弹出菜单中选择则对象,在弹出菜单中选择“编编写规
9、则脚本为写规则脚本为”/“CREATECREATE到到”/“新查询编辑器窗口新查询编辑器窗口”,会,会打开一个新的查询编辑器窗口,打开一个新的查询编辑器窗口,并在其中显示该规则的定义语句,并在其中显示该规则的定义语句,如图如图7-17-1所示。所示。7.1.4绑定规则绑定规则p绑定规则是指将已经存在的规则应用到列绑定规则是指将已经存在的规则应用到列或用户自定义的数据类型中。使用存储过或用户自定义的数据类型中。使用存储过程程sp_bindrulesp_bindrule可以将规则绑定到列或用可以将规则绑定到列或用户自定义的数据类型,语法如下:户自定义的数据类型,语法如下:sp_bindrule r
10、ulename=sp_bindrule rulename=规则名规则名,objname=objname=对象名对象名【例例7-3】p规则规则SexRuleSexRule绑定到表绑定到表EmployeesEmployees的列的列SexSex上上的语句如下:的语句如下:USE HrSystemUSE HrSystemGOGOEXEC sp_bindrule SexRule,EXEC sp_bindrule SexRule,Employees.Sex Employees.Sex GOGO执行的结果如下:执行的结果如下:已将规则绑定到表的列。已将规则绑定到表的列。【例例7-3】p下面通过一个下面通过
11、一个INSERTINSERT语句验证规则的应用效果。执行下面的语句验证规则的应用效果。执行下面的INSERTINSERT语句,语句,向表向表EmployeesEmployees中插入一条记录。中插入一条记录。USE HrSystemUSE HrSystemGOGOINSERT INTO Employees(Emp_name,Sex,Title,Wage,IdCard,Dep_id)INSERT INTO Employees(Emp_name,Sex,Title,Wage,IdCard,Dep_id)VALUES(VALUES(小李小李,无无,职员职员,10000,110123xxxx,1),1
12、0000,110123xxxx,1)GOGOp注意,注意,INSERTINSERT语句设置列语句设置列SexSex的值为的值为“无无”。因为列。因为列SexSex绑定到规则绑定到规则SexRuleSexRule,而在规则,而在规则SexRuleSexRule中规定列值只能是中规定列值只能是“男男”或或“女女”。因此,执。因此,执行行INSERTINSERT语句的结果如下:语句的结果如下:消息消息513513,级别,级别1616,状态,状态0 0,第,第2 2 行行列的插入或更新与先前的列的插入或更新与先前的CREATE RULE CREATE RULE 语句所指定的规则发生冲突。该语句已语句所
13、指定的规则发生冲突。该语句已终止。冲突发生于数据库终止。冲突发生于数据库HrSystemHrSystem,表,表dbo.Employeesdbo.Employees,列,列SexSex。语句已终止。语句已终止。p返回结果中提示返回结果中提示INSERTINSERT语句中指定的列语句中指定的列SexSex的指定值(的指定值(无无)不满足之前)不满足之前绑定的规则。绑定的规则。7.1.5解除绑定规则解除绑定规则p使用存储过程使用存储过程sp_unbindrulesp_unbindrule可以解除规可以解除规则的绑定,它的基本语法如下:则的绑定,它的基本语法如下:sp_unbindrulesp_un
14、bindrule objname=objname=对象对象名名p对象名可以是表名和列名,也可以是自定对象名可以是表名和列名,也可以是自定义的数据类型。义的数据类型。【例例7-4】p使用存储过程使用存储过程sp_unbindrulesp_unbindrule取消表取消表EmployeesEmployees的列的列SexSex上绑定的规则,具体语句如下:上绑定的规则,具体语句如下:USE HrSystemUSE HrSystemGOGOEXEC sp_unbindrule Employees.Sex EXEC sp_unbindrule Employees.Sex GOGOp执行的结果如下:执行的
15、结果如下:(所影响的行数为(所影响的行数为 1 1 行)行)已从表的列上解除了规则的绑定。已从表的列上解除了规则的绑定。7.1.6删除规则删除规则p在在SQL Server Management StudioSQL Server Management Studio中,右键单击指定中,右键单击指定的规则,在弹出菜单中选择的规则,在弹出菜单中选择“删除删除”项则删除指定的项则删除指定的规则对象。规则对象。p也可以使用也可以使用DROP RULEDROP RULE语句从当前数据库中删除一个语句从当前数据库中删除一个或多个规则,语法如下:或多个规则,语法如下:DROP RULE DROP RULE 规
16、则名规则名1,1,规则名规则名2,.,2,.,规则名规则名nnp在删除规则前,需要调用在删除规则前,需要调用sp_unbindrulesp_unbindrule存储过程解存储过程解除该规则的绑定。除该规则的绑定。【例例7-5】p使用使用DROP RULEDROP RULE删除规则删除规则SexRuleSexRule,具体语句,具体语句如下:如下:USE HrSystemUSE HrSystemEXEC sp_unbindrule Employees.Sex EXEC sp_unbindrule Employees.Sex DROP RULE SexRuleDROP RULE SexRule7.
17、2索引索引7.2.1 设计索引7.2.2 创建索引7.2.3 修改索引7.2.4 删除索引7.2.5 查看索引信息7.2.6 使用索引优化数据库查询效率7.2.7 无法使用索引的SELECT语句7.2.1 设计索引p用户对数据库最常用的操作就是查询数据。在用户对数据库最常用的操作就是查询数据。在数据量比较大时,搜索满足条件的数据可能会花数据量比较大时,搜索满足条件的数据可能会花费很长时间,从而占用较多的服务器资源。为了费很长时间,从而占用较多的服务器资源。为了提高数据检索的能力,数据库中引入了索引的概提高数据检索的能力,数据库中引入了索引的概念。念。p在在SQL ServerSQL Serve
18、r中,表或视图可以包含两种索引,中,表或视图可以包含两种索引,即聚集索引和非聚集索引。即聚集索引和非聚集索引。1聚集索引聚集索引p在聚集索引中,表中各行的物理顺序与索引键在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同。一个表只能包含一值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引,因为表中数据只能按照一种顺序进个聚集索引,因为表中数据只能按照一种顺序进行存储。聚集索引通常可加快行存储。聚集索引通常可加快UPDATEUPDATE和和DELETEDELETE操操作的速度,因为这两个操作需要读取大量的数据。作的速度,因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花
19、很长时间,因为执创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。行这两个操作时要在磁盘上对表的行进行重组。Emp_name上聚集索引的映射关系上聚集索引的映射关系保存聚集索引的保存聚集索引的B树的组织结构示意图树的组织结构示意图p在在SQL SQL ServerServer中中,聚聚集集索索引引按按照照B B树树结结构构进进行行组组织织,其示意图如图其示意图如图7-37-3所示。所示。2非聚集索引非聚集索引p因为一个表中只能有一个聚集索引,如果需因为一个表中只能有一个聚集索引,如果需要在表中建立多个索引,则可以创建为非聚集要在表中建立多个索引,则可以创建为非
20、聚集索引。表中的数据并不按照非聚集索引列的顺索引。表中的数据并不按照非聚集索引列的顺序存储,但非聚集索引的索引行中保存了非聚序存储,但非聚集索引的索引行中保存了非聚集键值和行定位器,可以快捷地根据非聚集键集键值和行定位器,可以快捷地根据非聚集键的值来定位记录的存储位置。的值来定位记录的存储位置。p非聚集索引也使用非聚集索引也使用B B树结构进行组织,只是树结构进行组织,只是B B树的叶层是由索引页而不是数据页组成的。树的叶层是由索引页而不是数据页组成的。3唯一索引唯一索引p无论是聚集索引,还是非聚集索引,都可以是唯一无论是聚集索引,还是非聚集索引,都可以是唯一索引。在索引。在SQL Serve
21、rSQL Server中,当唯一性是中,当唯一性是.数据本身的数据本身的特点时,可创建唯一索引,但索引列的组合不同于特点时,可创建唯一索引,但索引列的组合不同于表的主键。例如,如果要频繁查询表表的主键。例如,如果要频繁查询表EmployeesEmployees(该表主键为列(该表主键为列Emp_idEmp_id)的列)的列Emp_nameEmp_name,而且要保,而且要保证姓名是唯一的,则在列证姓名是唯一的,则在列Emp_nameEmp_name上创建唯一索引。上创建唯一索引。如果用户为多个员工输入了相同的姓名,则数据库如果用户为多个员工输入了相同的姓名,则数据库显示错误,并且不能保存该表。
22、显示错误,并且不能保存该表。7.2.2创建索引创建索引p(1 1)在)在SQL Server Management StudioSQL Server Management Studio中,选择并中,选择并右击要创建索引的表,从弹出菜单中选择右击要创建索引的表,从弹出菜单中选择“设计设计”,打开表设计器。右键单击表设计器,从弹出菜单中选打开表设计器。右键单击表设计器,从弹出菜单中选择择“索引索引/键键”命令,打开命令,打开“索引索引/键键”对话框。对话对话框。对话框中列出了已经存在的索引,如图框中列出了已经存在的索引,如图7-47-4所示。所示。创建索引创建索引(2 2)单击)单击“添加添加”按
23、钮。在按钮。在“选定的主选定的主/唯一键或索引唯一键或索引”框显示系统分配给新索引的名称。框显示系统分配给新索引的名称。(3 3)在)在“列列”属性下选择要创建索引的列。可以选择属性下选择要创建索引的列。可以选择多达多达1616列。为获得最佳性能,最好只选择一列或两列。为获得最佳性能,最好只选择一列或两列。对所选的每一列,可指出索引是按升序还是降列。对所选的每一列,可指出索引是按升序还是降序组织列值。序组织列值。(4 4)如果要创建唯一索引,则在)如果要创建唯一索引,则在“是唯一的是唯一的”属性中属性中选择选择“是是”。(5 5)设置完成后,单击)设置完成后,单击“确定确定”按钮。按钮。(6
24、6)当保存表时,索引即创建在数据库中。)当保存表时,索引即创建在数据库中。使用使用CREATEINDEX语句创建索引语句创建索引CREATE UNIQUE CLUSTERED|CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX NONCLUSTERED INDEX 索引名索引名ON ON 表名表名|视图名视图名 (列名列名 ASC|DESC ,.n )ASC|DESC ,.n )1使用使用UNIQUE参数创建唯一索引。参数创建唯一索引。p【例例7-67-6】在数据库在数据库HrSystemHrSystem中为表中为表EmployeesEmployees创建基于
25、创建基于IDCardIDCard列的唯一索引列的唯一索引IX_EmployeesIX_Employees,可以使用以下命令:,可以使用以下命令:USE HrSystemUSE HrSystemGOGOCREATE UNIQUE NONCLUSTERED INDEX CREATE UNIQUE NONCLUSTERED INDEX IX_Employees ON IX_Employees ON dbo.Employees(IdCard)dbo.Employees(IdCard)GOGO2聚集聚集/非聚集索引。非聚集索引。p【例例7-77-7】为表为表EmployeesEmployees创建基于列
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 2012 数据库 开发 教程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内