《《视图和索引》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《视图和索引》PPT课件.ppt(51页珍藏版)》请在三一办公上搜索。
1、1,第七章 视图和索引,7.1 视图简介 7.2 创建视图 7.3 查看与修改视图 7.4 编辑视图中的记录 7.5 视图定义信息查询 7.6 删除视图7.7 索引,2,7.1 视图简介,1.视图的基本概念 视图是一个虚拟表,其内容由查询语句定义生成。表是视图的基础。数据库中只存储了视图定义,而不存放视图所对应的数据,视图所对应的数据仍存放在视图所引用的基表中。视图中的数据是视图在被使用时动态生成的,它随着基表数据的变化而发生变化。,3,7.1 视图简介,2.视图的作用 1)视图可以集中数据,满足不同用户对数据的不同要求。2)视图可以简化复杂查询的结构,从而方便用户对数据的操作。3)视图能够对
2、数据提供安全保护。4)便于组织数据导出。,4,7.2 创建视图,创建视图时应该注意以下:创建者必须拥有创建视图的权限,对视图中引用的基表或视图有许可权。只能在当前数据库中创建视图在一个视图中最多引用1024列,视图中记录的行数限制由基表中记录数目决定。视图的名称必须遵循标识符的定义规则,对于每个用户来说也必须唯一,而且视图名称不允许与该用户拥有的表重名。视图中列的名称一般继承其基表中列的名称,如果视图中某一列是算术表达式、函数、常量或者来自多个表的列名相同,必须要为视图中的列重新定义名称。,5,7.2 创建视图,可以将视图创建在其他视图上,SQL Server 2005中允许32层的视图嵌套。
3、不能在视图上创建全文索引,不能将规则、默认绑定在视图上。不能在临时表上创建视图,也不能创建临时视图。定义视图的查询语句中不能包含计算子句COMPUTE、COMPUTE BY子句和INTO关键字。,6,7.2 创建视图,7.2.1 使用SSMS创建视图 7.2.2 使用CREATE VIEW语句创建视图7.2.3 重命名视图,7,7.2.1 使用SSMS创建视图,示范案例1 使用SQL Server Management Studio在“Northwind”数据库中创建一个视图“V_dingdanxiangxi”,用于查询一个订单是由哪个雇员签订的,签订的是什么时候,买了什么产品,价格是多少,由
4、谁来送货,送货的地址是什么等内容。,8,使用CREATE VIEW语句创建视图语法格式如下:CREATE VIEW.view_name(column,.n)WITH ENCRYPTION AS select_statement WITH CHECK OPTION,7.2.2 使用CREATE VIEW创建视图,9,7.2.2 使用CREATE VIEW创建视图,示范案例2 使用T-SQL语句在“Northwind”数据库中创建一个视图“V_ProductInfo”,用于查询所有产品的产品号“productid”、产品名称“productname”和产品价格“unitprice”。使用的基本表为
5、“Products”表。程序清单如下:CREATE VIEW V_ProductInfo AS SELECT productid,productname,unitprice FROM products,10,7.2.3 重命名视图,1.使用SSMS 2.使用系统存储过程sp_rename 其语法格式如下:sp_rename old_name,new_name 示范案例3 使用T-SQL语句将Northwind数据库中视图“V_SelectProductInfo1”重命名为“vv_spinfo”程序清单如下:EXEC sp_rename v_selectproductinfo1,vv_spinf
6、o,11,7.3 查看与修改视图,7.3.1 查看视图 7.3.2 在SQL Server Management Studio中修改视图 7.3.3 用CREATE VIEW修改视图,12,7.3.1 查看视图,1.在SQL Server Management Studio中查看视图内容的方法与查看数据表内容的方法几乎一样。2.在T-SQL语句里,使用Select语句可以查看视图的内容,其用法与查看数据表内容的用法一样,区别只是把数据表名改为视图名。,13,7.3.2 在SSMS中修改视图,使用SQL Server Management Studio修改视图事实上只是修改该视图所存储的T-SQ
7、L语句。,14,7.3.3 用ALTER VIEW修改视图,其语法格式如下:ALTER VIEW view_name(column,.n)WITH ENCRYPTION AS select_statement注:对于加密或未加密的视图都可以用此语句进行修改。,15,7.3.3 用ALTER VIEW修改视图,示范案例4 使用T-SQL语句修改Northwind数据库中的视图“V_SelectProductInfo”,用于查询类别名“categoryname”为“Beverages”的所有产品的详细信息,如产品号“productid”、产品名称“productname”和供应商的公司名称“com
8、panyname”。,16,7.3.3 用ALTER VIEW修改视图,程序清单如下:ALTER VIEW V_SelectProductInfo AS SELECT products.productid,products.productname,panynameFROM products JOIN categories ON products.categoryid=categories.categoryid JOIN suppliers ON products.supplierid=suppliers.supplieridWHERE categories.categoryname=Bever
9、ages,17,7.4 编辑视图中的记录,7.4.1 编辑视图中记录的限制 7.4.2 在SSMS中操作视图记录 7.4.3 用T-SQL语句操作视图记录,18,7.4.1 编辑视图中记录的限制,在使用视图修改数据时,要注意下列一些事项:不能在一个语句中对多个基表使用数据修改语句。如果要修改由两个或两个以上基表得到的视图,必须进行多次修改,每次修改只能影响一个基表。对于基表中需更新而又不允许空值的所有列,它们的值在 INSERT 语句或 DEFAULT 定义中指定。这将确保基表中所有需要值的列都可以获取值。不能修改那些通过计算得到结果的列。,19,7.4.1 编辑视图中记录的限制,在视图定义中
10、使用了 WITH CHECK OPTION 子句,则所有在视图上执行的数据修改语句都必须符合定义视图的 SELECT 语句中所设定的条件。在基表的列中修改的数据必须符合对这些列的约束条件,如是否为空、约束、DEFAULT 定义等。,20,7.4.2 在SSMS中操作视图记录,1.修改视图中的记录2.在视图中插入记录3.在视图中删除记录,21,7.4.3 用T-SQL语句操作视图记录,1.更新记录UPDATE V_ProductInfoSET unitprice=16WHERE productid=4,22,7.4.3 用T-SQL语句操作视图记录,2.删除记录DELETE V_ProductI
11、nfoWHERE productid=4,23,7.4.3 用T-SQL语句操作视图记录,3.插入记录INSERT V_ProductInfoVALUES(苹果,$3),24,7.5 视图定义信息查询,1.使用SQL Server Management Studio查看视图信息2.使用系统存储过程查看视图信息 EXEC sp_helptext objname,25,7.6 删除视图,1.在SSMS中删除视图2.使用DROP VIEW语句删除视图 语法格式如下:DROP VIEW view,.n,26,7.6 删除视图,示范案例5 使用T-SQL语句删除“Northwind”数据库中的视图“V_
12、SelectProductInfo”。程序清单如下:DROP VIEW V_SelectProductInfo,2023/8/1,27,7.7 索引,问题如何提高查询速度?某些列如何保证没有重复值或满足一定条件?如何保证数据的参照完整性?,2023/8/1,28,7.7索 引,索引是一个记录表中所包含的值以及相应的存储位置的列表。索引通过记录表中的关键值来指向表中的记录,这样数据库引擎就不用扫描整个表而能定位到相关的记录。,2023/8/1,29,索引的作用,创建索引的好处主要有以下两点:(1)加快数据查询(2)加快表的连接、排序和分组工作创建索引也有它的不足,如下所述:(1)创建索引需要占用
13、数据空间和时间(2)建立索引会减慢数据修改的速度,2023/8/1,30,索引的分类,按照表中建立索引的那一列(或列组合)中的数据是否各不相同,可以将索引分为惟一索引和非惟一索引。按照索引的结构,可以将其划分为两大类,聚集索引(Clustered index)和非聚集索引(Nonclustered index)。,2023/8/1,31,1惟一索引和非惟一索引 惟一索引要求所有数据行中任意两行中的被索引列或索引列组合不能存在重复值,包括不能有两个空值NULL,而非惟一索引则不存在这样的限制。,2023/8/1,32,2聚集索引和非聚集索引聚集索引会对表进行物理排序,所以这种索引对查询非常有效。
14、表中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server会用主键列作为聚集索引键。非聚集索引不会对表进行物理排序。,2023/8/1,33,通常,下列情况需要在表中的某一列或某些列上建立索引:(1)经常用作查询条件的列。(2)需要频繁地按范围搜索的列。(3)连接中频繁使用的列。(4)在ORDER BY子句中经常使用的列。(5)主键或外键的列。(6)值是惟一的列。,2023/8/1,34,由于建立索引表后将占用系统资源,且索引的建立会影响数据的修改速度,每执行一次增删改操作都要重新维护一次索引,因此在没有必要的情况下不要建立索引。,2023/8/1,35,创建索引,索
15、引可以在创建表时建立,也可以在定义表以后的任何时候建立;既可以在表的一列上建立一个索引,也可以在列组合上建立一个索引;一个表中既可以建立一个索引,也可以建立多个索引(当然,其中只有一个聚集索引)。,2023/8/1,36,可以利用企业管理器建立或利用T-SQL建立索引。建立索引的条件如下:(1)只有表的拥有者才能建立索引。(2)每个表只能建立一个聚集索引。(3)每个表最多可以建立250个非聚集索引。(4)索引最多可以包含16列。,2023/8/1,37,(5)建立惟一索引时,应保证建立索引的列不包括重复的数据,并且没有两个以上的NULL。(6)text、ntext、image列不能建立索引。,
16、2023/8/1,38,创建索引方法(一),系统自动创建索引 在创建或修改表时,如果添加了一个主键或惟一键约束,则系统将自动在该表上,以该键值作为索引列,创建一个惟一索引。,2023/8/1,39,创建索引方法(二),使用企业管理器【问题】在Student表上创建基于StuName列,名为IX_StuName的非聚集、非惟一索引。【注意】创建主键约束和惟一约束时,会自动在这些列上创建惟一索引。,2023/8/1,40,创建索引方法(三)-使用SQL语句,常用索引命令常用格式如下:CREATE UNIQUE CLUSTEREDNONCLUSTERED INDEX index_name ON ta
17、ble_nameview_name(column_name ASC|DESC,n)WITH index_property,n,2023/8/1,41,【练习】使用T-SQL语句在StuCou表上创建名为IX_StuNoCouNo的聚集、惟一、复合索引,该索引基于StuNo列和CouNo列创建。CREATE UNIQUE CLUSTERED INDEX IX_StuNoCouNo ON StuCou(StuNo,CouNo)GO,2023/8/1,42,复合索引说明,在(字段1,字段2)上创建的复合索引和在(字段2,字段1)上创建的复合索引是不同的。查找数据时,只有在where子句中指定了索引的
18、第一个字段时才使用该复合索引。复合索引中字段的顺序很重要:在次序上首先定义最具惟一性的字段列。,2023/8/1,43,删除索引,使用企业管理器【问题】使用企业管理器删除Student表中的IX_StuName索引。,2023/8/1,44,使用SQL语句格式:DROP INDEX table_name.index_name,2023/8/1,45,【问题】删除StuCou表中的IX_StuNoCouNo索引。DROP INDEX StuCou.IX_StuNoCouNo,2023/8/1,46,【思考】student表中的索引PK_Student可以删除吗?,2023/8/1,47,【注意】
19、不能用DROP INDEX语句删除由PRIMARY KEY约束或UNIQUE约束创建的索引。要删除这些索引必须先删除PRIMARY KEY约束或UNIQUE约束。在删除聚集索引时,表中的所有非聚集索引都将被重建。,2023/8/1,48,管理索引,显示索引信息重命名索引,2023/8/1,49,显示索引信息企业管理器使用系统存储过程sp_helpindex table_name【练习】使用系统存储过程sp_helpindex查看Xk数据库中Student表的索引信息。EXEC sp_helpindex Student,2023/8/1,50,重命名索引企业管理器使用Transact_SQL命令语句来实现。EXEC sp_rename table_name.old_index_name,new_index_name,2023/8/1,51,【练习】使用Transact_SQL语句将Student表的索引IX_StuName重新命名为IX_StuNameNew。EXEC sp_rename Student.IX_StuName,IX_StuNameNew,