数据库对象管理课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据库对象管理课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 对象 管理 课件
- 资源描述:
-
1、 数据库对象管理数据库对象管理3.1 索引索引 3.2 视图视图 3.3 存储过程存储过程 3.4 触发器触发器23.1 索引的概念 3.1.1 索引的概念 3.1.2 创建索引的优点与缺点 3.1.3 考虑建索引的列和不考虑建索引的列 33.1.1 索引的概念 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的。数据库中的索引是一个列表,在这个列表中包含了某个表中一列或者若干列值的集合,以及这些值的记录在数据表中的存储位置的物理地址。43.1.2 索引的优、缺点 1.创建索引的优点创建索引的优点 可以大大加快数据检索速度。
2、通过创建唯一索引,可以保证数据记录的唯一性。在使用ORDER BY和GROUP BY子句进行检索数据时,可以显著减少查询中分组和排序的时间。使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。5 2.创建索引的缺点 创建索引要花费时间和占用存储空间。创建索引需要占用存储空间,如创建聚簇索引需要占用的存储空间是数据库表占用空间的1.2倍。在建立索引时,数据被复制以便建立聚簇索引,索引建立后,再将旧的未加索引的表数据删除。创建索引也需要花费时间。建立索引加快了数据检索速度,却减慢了数据修改速度。因为每当执行一次数据的插
3、入、删除和更新操作,就要维护索引。修改的数据越多,涉及维护索引的开销也就越大。如果将一些数据行插入到一个已经放满行的数据页面上,还必须将这个数据页面中最后一些数据移到下一个页面中去,这样,还必须改变索引页中的内容,以保持数据顺序的正确性。这就是对索引的维护。由于修改数据时要动态维护其索引,所以,对建立了索引的表执行修改操作要比未建立索引的表执行修改操作所花的时间要长。因此,创建索引虽然可以加快数据查询的速度,但是却会减慢数据修改的速度。63.1.3考虑建索引的列和不考虑建索引的列考虑建索引的列和不考虑建索引的列 1.考虑建索引的列考虑建索引的列如果在一个列上创建索引,该列就称为索引列。索引列中
4、的值称为关键字值。考虑建索引的列有如下这些:主键通常,检索、存取表是通过主键来进行的。因此,应该考虑在主键上建立索引。连接中频繁使用的列用于连接的列若按顺序存放,系统可以很快地执行连接。如外键,除用于实现参照完整性外,还经常用于进行表的连接。在某一范围内频繁搜索的列和按排序顺序频繁检索的列。7 2.不考虑建索引的列不考虑建索引的列 建立索引需要产生一定的存储开销,在进行插入和更新数据的操作时,维护索引也要花费时间和空间,因此,没有必要对表中的所有列都建立索引。创建索引与否以及在哪些列上建立索引,要看建立索引和维护索引的代价与因建立索引所节省的时间相比哪个更合算。一般来说,如下一些列不考虑建立索
5、引:很少或从来不在查询中引用的列,因为系统很少或从来不根据这个列的值去查找数据行。只有两个或很少几个值的列(如性别,只有两个值“男”或“女”),以这样的列创建索引并不能得到建立索引的好处。以bit、text、image数据类型定义的列。数据行数很少的小表一般也没有必要创建索引。83.2 聚簇索引与非聚簇索引3.2.1 索引的分类索引的分类 根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:聚簇索引与非聚簇索引。和表及视图一样,索引也是数据库对象。聚簇索引聚簇索引(Clustered Index)数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录。非聚簇索
6、引非聚簇索引(Nonclustered Index)数据表的物理顺序和索引表的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序的,用于在表中快速定位数据。9 SQL Server 2005中,创建索引有两种方法:使用T-SQL语句创建索引 使用SQL Server Management Studio创建索引 在一个表的一个或多个列上创建索引时,应考虑以下几点:当在一个表上创建PRIMARY KEY约束或UNIQUE约束时,SQL Server自动创建唯一性索引。不能在已经创建PRIMARY KEY约束或UNIQUE约束的列上创建索引。定义PRIMARY KEY 约束或UNIQUE
7、约束与创建标准索引相比应是首选的方法。必须是表的拥有者才能创建索引。在一个列上创建索引之前,确定该列是否已经存在索引。也可以在视图上创建索引,但创建视图时必须带参数SCHEMABINDING。在视图上创建索引的创建方法参见SQL Server 2005随机帮助。3.3 索引的创建与管理10 3.3.1 使用T-SQL语句创建索引 3.3.2 使用T-SQL语句管理索引 3.3.3 使用SQL Server Management Studio管理索引3.3 索引的创建与管理111.创建索引的创建索引的SQL语句语法语句语法 创建索引使用的是CREATE INDEX语句。CREATE INDEX语
8、句的语法形式如下:CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_nameON table_name(column_name ASC|DESC ,.n )WITHPAD_INDEX,FILLFACTOR=fillfactor,DROP_EXISTING3.3.1 使用T-SQL语句创建索引12 在以上语法形式中:UNIQUE:指定创建的索引是唯一索引。如果不使用这个关键字,创建的索引就不是唯一索引。CLUSTERED|NONCLUSTERED:指定被创建索引的类型。使用CLUSTERED创建的是聚簇索引;使用NONCLUSTERED创建的是非聚
9、簇索引。这两个关键字中只能选其中的一个。index_name:为新创建的索引指定的名字。table_name:创建索引的基表的名字。column_name:索引中包含的列的名字。ASC|DESC:确定某个具体的索引列是升序还是降序排序。默认设置为ASC升序。PAD_INDEX和FILLFACTOR:填充因子,它指定 SQL Server 创建索引的过程中,各索引页的填满程度。DROP_EXISTING:删除先前存在的、与创建索引同名的聚簇索引或非聚簇索引。13 2.2.创建唯一索引创建唯一索引 索引按照结构可分为聚簇索引和非聚簇索引两种不同的类型。按照实现的功能分,有一类索引被称作“唯一索引”
10、。它既可以采用聚簇索引的结构,又可以采用非聚簇索引的结构。唯一索引的特征:唯一索引的特征:不允许两行具有相同的索引值。可用于实施实体完整性。在创建主键约束和唯一约束时自动创建唯一索引。在已有数据的表上创建唯一索引时,如果在该列数据存在重复值,那么系统将返回错误信息。在实际的编程应用中会经常使用到唯一索引。因为在一个表中,可能会有很多列的列值需要保证其唯一性,如:有身份证号、工号、学号等,可在这些列上创建唯一索引。14【例例3-1】在JWGL数据库的BOOK表上创建一个名为book_id_index的唯一性聚簇索引,索引关键字为book_id,升序,填充因子50%USE jwglGOCREATE
11、 UNIQUE CLUSTERED INDEX book_id_indexON book(book_id ASC)WITHFILLFACTOR =5015 3.创建复合索引创建复合索引 有些索引列只有一列,而有些索引列由两列或更多列组成。我们把由两列或更多列组成的索引称作“复合索引”。复合索引的特征复合索引的特征 把两列或更多列指定为索引列。将复合列作为一个整体进行搜索。创建复合索引中的列序不一定与表定义列序相同。【例例-2】在JWGL数据库的student_course表上创建一个名为student_course_index的非聚簇复合索引,索引关键字为student_id,course_i
12、d,升序,填充因子50%USE jwglGOCREATE NONCLUSTERED INDEX student_course_indexON student_course(student_id ASC,course_id ASC)WITHFILLFACTOR=5016 创建复合索引应注意的几点创建复合索引应注意的几点 查询的WHERE子句必须引用复合索引中的第一列,以便让查询优化程序使用该复合索引。被查询表中需要频繁访问的列应考虑建复合索引以提高查询性能。在一个复合索引中索引列最多可组合16列。列的顺序很重要,应首先定义最具唯一性的列,(column1,column2)上的索引不同于(colu
13、mn2,column1)上的索引。使用复合索引能增加查询性能,并减少表上创建索引的数量。171.使用使用T-SQL语句查看索引语句查看索引 在创建索引之前或在创建索引之后,可以用sp_helpindex或sp_help系统存储过程查看表的索引。【例例3-3】用系统存储过程sp_helpindex查看JWGL数据库中表book的索引信息。USE jwglGOEXEC sp_helpindex book 3.3.2 使用T-SQL语句管理索引18 2.使用使用T-SQL语句对索引更名语句对索引更名 在创建索引之后,可以用sp_ rename系统存储过程重新命名表的索引。【例例3-4】用系统存储过程
14、sp_ rename将表book的索引book_id_index 重新命名为book_id_index1。USE jwglGOsp_rename book.book_id_index,book_id_index1 注意:要重命名的索引要以“表名.索引名”的形式给出。但新索引名不能给出表名。但新索引名不能给出表名。19 3.使用使用T-SQL语句删除索引语句删除索引 在创建索引之后,如果该索引不再需要,可以用DROP语句将其删除。DROP语句的语法如下:DROP INDEX table.index,.n【例例3-5】用DROP语句将表book的索引“book_id_index1”删除。USE j
15、wglGODROP INDEX book.book_id_index1 注意:注意:被删除的索引要以“表名.索引名”的形式给出。删除索引时要注意,如果索引是在CREATE TABLE语句中创建的,只能用ALTER TABLE语句删除索引。如果索引是用CREATE INDEX创建的,可用DROP INDEX删除。20 使用SQL Server Management Studio可以创建索引。3.3.3 使用SQL Server Management Studio管理索引21 在SQL Server Management Studio的“对象资源管理器”面板中,使用与创建索引同样的方法即可看到该索
16、引对应的信息。使用系统存储过程sp_helpindex查看指定表的索引信息。【例6.5】使用系统存储过程sp_helpindex查看book数据库中book1表的索引信息。在SQL Server Management Studio查询窗口中运行如下命令:USE book GO EXEC sp_helpindex book1 GO显示索引信息 22 使用SQL Server Management Studio删除索引。3.3.3 使用SQL Server Management Studio管理索引233.2 视图 视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图的结构和数据是
17、对数据表进行查询的结果。视图被定义后便存储在数据库中,通过视图看到的数据只是存放在基表中的数据。当对通过视图看到的数据进行修改时,相应的基表的数据也会发生变化,同时,若基表的数据发生变化,这种变化也会自动地反映到视图中。视图可以是一个数据表的一部分,也可以是多个基表的联合;视图也可以由一个或多个其他视图产生。一旦视图定义后,就可以用select语句象对真实表一样查询。243.2.1 创建视图 使用Transact-SQL语句创建视图 1.创建视图的SQL语句的语法形式CREATE VIEW .view_name (column_name ,.n )WITH ENCRYPTION AS sele
18、ct_statementFROM table_name WHERE search_conditionWITH CHECK OPTION 其中:view_name:为新创建的视图指定的名字,视图名称必须符合标识符规则。column_name:在视图中包含的列名,也可以在SELECT 语句中指定列名。25 table_name:视图基表的名字。select_statement:选择哪些列进入视图的SELECT语句。WHERE search_condition:基表数据进入视图所应满足的条件 WITH CHECK OPTION:迫使通过视图执行的所有数据修改语句必须符合视图定义中设置的条件。WITH
19、 ENCRYPTION:对视图的定义进行加密。2.用SQL语句创建视图的步骤 在创建视图时,应首先测试SELECT语句以确保能返回正确的结果。创建视图的步骤如下:编写用于创建视图的SELECT语句。对SELECT语句进行测试。检查测试结果是否正确,是否和预期的一样。创建视图。26 3.在创建视图的时候,应该考虑以下因素 在CREATE VIEW语句中,不能包括ORDER BY、GROUP BY 子句,也不能出现INTO关键字。创建视图所参考基表的列数最多为1024列。创建视图不能参考临时表。在一个批处理语句中,CREATE VIEW语句不能和其他Transact-SQL语句混合使用。尽量避免使
20、用外连接创建视图。27 使用SQL Server Management Studio创建视图 假设要从student表中建立一个性别为“男”、包含student_id、student_name、class_id、sex四列信息的视图。使用SQL Server Management Studio创建视图的具体步骤如下:1)首先进入SQL Server Management Studio。2)按顺序展开“数据库”、要创建视图所属的数据库、再展开“视图”子节点。3)右边“摘要”窗口显示的是数据库中已经存在的视图,右击窗口的空白处,在弹出的快捷菜单上选择“新建视图”项,系统弹出如图9-1的“添加表”窗
21、口,这个窗口用于为新创建的视图提供基础数据。该窗口有三个选项卡,表、视图及函数,这意味着可以以表、视图及表值函数为基础数据创建新的视图。28 4)点击“添加”,选择表student,再点击“关闭”。系统呈现如图9-2的视图建立窗口。图9-1 创建视图的窗口29图9-2 视图建立窗口30 在SQL查询条件窗格中输入查询条件语句:SELECT student_id,student_name,class_id,sex FROM student WHERE sex=1 5)确认结果正确后,点击工具栏上的“”按钮,保存当前创建的视图,输入视图的名称,点击“确定”按钮,一个视图也就创建完成了。313.2.
22、2 使用视图的优点和缺点 1.视图的优点 视图可以屏蔽数据的复杂性,简化用户对数据库的操作,还可以使用视图重新组织数据。视图可以让不同的用户以不同的方式看到不同或者相同的数据集。安全保护:视图可以定制不同用户对数据的访问权限。2.视图的缺点 性能降低:修改的限制:323.2.3 创建水平视图 视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集。【例9-1】在数据库JWGL的表student上创建一个视图student_view1,视图的数据包括班级号为g99402 或g99403所有学生的资料。USE jwglGOCREATE VIEW stu
23、dent_view1ASSELECT *FROM studentWHERE(class_id=g99402 OR class_id=g99403)333.2.4 创建投影视图 如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集。【例9-2】创建一个名为“studdent_view2”的视图,它从数据库JWGL的student表中查询出性别为“男”的所有学生的姓名、性别、家庭住址资料。USE jwglGOCREATE VIEW student_view2ASSELECT student_id AS 学号,student_name AS 姓名,sex
24、 AS 性别,class_id AS 班级,home_addr AS 家庭住址,entrance_date AS 入学时间 ,birth AS 出生年月FROM studentWHERE sex=1 WITH CHECK OPTION 343.2.5 创建联合视图 使用视图的一个原因是简化多表查询,可以生成从多个表中提取数据的联合视图(joined View)把查询结果表示为一个单独的“可见表”。【例9-3】创建一个名为“student_view3”的视图,它是由表course、book及class_course创建的一个显示“g99402”班所开课程的课程名、所用教材的教材名、出版社及作者的
25、视图。USE jwglGOCREATE VIEW student_view3 WITH ENCRYPTION /*加密视图*/ASSELECT course.course_name AS 课程名,book.book_name AS 书名,book.publish_company AS 出版社,book.author AS 作者FROM course,book,class_courseWHERE(course.book_id=book.book_id AND class_course.course_id=course.course_id)AND (class_course.class_id=g9
展开阅读全文