数据库原理与应用 锦州师范高等专科学校 计算机系

54
数数数数数数数数 数数数数数数数数数数 数数数数

description

数据库原理与应用 锦州师范高等专科学校 计算机系. 第七章 索引与数据完整性的实现. 7.1 索引. 7.1.1 索引的创建. 7.1.2 索引的删除. 7.2 约束和默认. 7.2.1 约束的定义和删除. 7.2.2 默认值对象的定义、使用和删除. 7.3 数据完整性. 7.3.1 域完整性的实现. 7.3.2 实体完整性的实现. 7.3.3 参照完整性的实现. 第七章 索引与数据完整性的实现. ● 索引: ★ 数据库中的索引是一个列表(包含了某个表中一列或若干列值的集合,以及这些值的记录在数据库表的存储位置的物理地址)。 - PowerPoint PPT Presentation

Transcript of 数据库原理与应用 锦州师范高等专科学校 计算机系

Page 1: 数据库原理与应用 锦州师范高等专科学校 计算机系

数据库原理与应用锦州师范高等专科学校

计算机系

Page 2: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.1 索引

7.2 约束和默认

7.3 数据完整性

7.1.1 索引的创建7.1.2 索引的删除

7.2.1 约束的定义和删除

7.2.2 默认值对象的定义、使用和删除

7.3.1 域完整性的实现

7.3.2 实体完整性的实现7.3.3 参照完整性的实现

Page 3: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

● 索引: ★ 数据库中的索引是一个列表(包含了某个表中一列或若

干列值的集合,以及这些值的记录在数据库表的存储位置的物理地址)。

★ 在数据库中,如果想在某个表中快速查找满足条件的记录,可以创建索引。

★ 索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。

★ 当 SQL Server 进行数据查询时,查询优化器会自动计算现有的几种执行查询方案,看哪种方案的开销最小,速度最快, SQL Server 就会按照该方案查询。

Page 4: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

★ 如果未建立索引,系统将会从第一条记录开始,对表中的所有记录进行扫描。

扫描整个表:从存储表格的地址开始,依次比较记录,直到找到位置。

★ 如果建立索引,就可以通过索引快速地找到查询结果。

通过索引查找时:因为索引是有序排列的,所以,可以通过高效的有序查找算法(如折半查找等)找到索引项,在根据索引项中记录的物理地址,找到查询结果的存储位置。

Page 5: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现7.1 索引 一、基本概念 页 ---- SQL Server 系统所管理的最小空间( 8K 的物理空

间)。 存储数据时:按照输入的时间顺序被放置在数据页上。 堆 ---- 数据存放的顺序与数据本身没有任何联系,是一种无序

的存储方式。 页分解 ---- 一个页堆满后,数据就堆放到另一个页上。 二、索引优点:(如同书的目录,是表中数据和相应存储位置

的列表,是树状结构) 第一,通过表的惟一性索引,可以保证每一行数据的惟一性 第二,加速数据页的定位,提高数据的检索速度,这是使用

索引最主要的原因。 第三,加速多表之间的连接,这有利于实现数据的参照完整

性。

Page 6: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现 第四,通过使用索引,可以在查询时使用系统提供的查询优

化器,提高系统性能。三、索引缺点: 第一,索引也要占用物理空间。 第二,当对表中数据进行了添加、删除和修改操作后,系统需

要对索引进行动态维护,这就降低了数据的维护速度。四、创建索引的列时,必须基于的准则: ① 在主关键字列中创建索引。 ② 在经常要查询的列中创建索引。 ③ 在经常用于连接的列,如外关键字列中创建索引。 ④ 在经常出现在 WHERE 子句和 ORDER BY 子句中的列中

创建索引。 ⑤ 不能在 text 、 image 和长度较大的 char 、 varchar 、 bi

nary 等数据类型的列中创建索引。因为,一个索引最大只能为 900B 。

Page 7: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

⑥ 当 UPDATE 的性能需求远大于 SELECT 的性能需求时,不应该创建索引。

五、簇索引与非簇索引(根据索引的顺序与数据表的物理存储顺序是否一致)

(聚集索引或非聚集索引) 1 、簇索引:索引的顺序与数据表的物理存储顺序一致。 2 、非簇索引:索引的顺序与数据表的物理存储顺序不一致。说明: (1) 、每个表只能有一个簇索引,但可以有多个非簇索引; (2) 、簇索引:★一列或多列(惟一标识一行)主键(不能为空)。 ★确定表中数据的物理顺序,可多列(例如:电话簿中“姓 +名”的排列)

★ 如果表中未建簇索引,且创建 PRIMARY KEY 约束时未指定非簇索引, PRIMARY KEY 约束会自动创建簇索引。

★ 可将常用列簇索引(物理排序),避免每次查该列时都进行排序,节省成本。

Page 8: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现(3) 、非簇索引:★(如课本)数据在一个地方,索引在一个地方,索引带 指针指向数据的存储位置。 ★ 索引中的项目按索引键值的顺序存储。 通俗名称索引 ★ 可以有多个非簇索引,例如园艺书中: 植物学名7.1.1 索引的创建 ★ SQL Server 2000 中,索引可以由系统自动创建,也可以由用户手工创

建。 ★ 系统在创建表中的其他对象时可以附带地创建新索引, 例如:新建表时,可以创建主键或惟一性约束,同时就创建了索引。

簇索引或非簇索引 系统自动创建的索引名也会因为创建主键的场所和方法不同而有所不同。

Page 9: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

★例:①、在企业管理器中:设置主键,系统会自动创建一个惟一的非簇索引,索引名为“ PK_ 表名”。

② 、在查询分析器中:使用语句添加主键约束,也会创建一个惟一索引,但索引名称为“ PK_ 表名 _********”, 其中 *是系统自动生成的数字或英文字母。

这个索引可以是簇索引或非簇索引,取决于在 Primary Key 后面使用的关键字,如使用 NONCLUSTERED 关键字,会生成非簇索引;如使用 CLUSTERED 关键字,会生成簇索引的惟一索引。

不使用关键字时,如果此表存在簇索引,由生成非簇索引的惟一索引,否则,生成簇索引的惟一索引。

Page 10: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.1.1 索引的创建 ★ 三种方法:①、使用 T-SQL语言 ② 、使用 SQL Server 的企业管理器 ③ 、使用 SQL Server 的索引管理器 (④、使用索引向导创建索引 ) (⑤、利用索引优化向导创建索引 ) ★ 创建索引时,要注意: P139 ① 到 ④ ① 当在表中创建主关键字约束或惟一性约束时, SQL Server 自动创建

一个惟一性索引。 ② 如果表中已有数据,在创建索引时, SQL Server 会检查数据的合法

性,当有不合法的数据存在时,创建索引失败。 ③ 当有多个列作为关键字时,应创建复合索引,即索引包含有两个或多

个。 ④ 基于相同列但列次序不同的复合索引也是不同的。如基于学号、课程号列的复合索引与基于课程号、学号列的复合索引是不同的。

Page 11: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现一、使用 CREATE INDEX命令创建索引1 、语法形式: CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] I

NDEX 索引名 ON{ 表名 |视图名 } (列名 1[ASC|DESC][ ,… n] ) [WITH< 索引选项 >[ ,… n]] [ON 文件组名 ] 其中 < 索引选项 > 中,包括:

{PAD_INDEX| FILLFACTOR=填充因子 | IGNORE_DUP_KEY| DROP_EXISTING| STATISTICS_NORECOMPUTE| SORT_IN_TEMPDB}

Page 12: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现1 、参数说明:( 1 )、 UNIQUE :创建惟一索引。 不允许有重复值。如有,则不能创建惟一索引;创建后,

如有 INSERT 或 UPDATE 操作,并导致出现重复值,则操作失败。

( 2 )、 CLUSTERED :创建簇索引。 它的顺序和数据行的物理存储顺序一致。 簇索引的最低一级(叶级)包含了表中实际的数据行。 一个表或视图只能有一个簇索引。 具有簇索引的视图称为索引视图。 必须先为视图创建惟一簇索引,然后才能为该视图定义

其他索引。

Page 13: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

★ 创建簇索引:☆ 表中数据行会按照簇索引指定的物理顺序重排,所以最好在创建表时创建簇索引;

☆ 为簇索引指定文件组时,也会导致数据的移动,所以在文件组上创建表或索引前,应确认哪些文件组可用并有足够的空间供索引使用;

☆ 必须在创建任何非簇索引之前创建簇索引,否则创建簇索引时将重建表上现有的非簇索引;

☆ 如在 CREATE INDEX命令中没有指定 CLUSTERED选项,则默认使用 NONCLUSTERED选项,创建一个非簇索引;

☆ 用簇索引查找数据快,但由于簇索引需要将表的所有数据完全重新排列,所需要的空间也就特别大,文件组的大小必须至少是整个表所需空间的 1.2倍( 120% );

Page 14: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

☆簇索引一般创建在表中经常搜索的列或按顺序访问的列上。

※※※※※※※※※※※※ ● 必须使用 SCHEMABINDING选项定义视图,才能在视图上

创建索引。 ● ASC|DESC :用于指定某个具体索引列的升序或降序排列方向。默认值为升序( ASC )

● column :√用于指定被索引的列。 √指定多列(创建组合索引)时,在 table 后圆括号

中列出组合索引要包括的列(按排序优先级排列),即复合索引。

√一个索引中最多可以指定 16 个列,但列的数据类型的长度之和不能超过 900 个字节,且复合索引中的所有字段必须在同一个表中。

※※※※※※※※※※※※

Page 15: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 3 )、 NONCLUSTERED :创建非簇索引。行的物理排序独立于索引排序。

★非簇索引具有完全独立于数据行的结构,使用非簇索引不会影响数据表中记录的实际存储顺序。

★非簇索引的叶级包含索引行,每个索引行均包含非簇索引键值和一个或多个指向包含该值的数据行的行定位器。

★ 如表没有簇索引,行定位器就是行的磁盘地址。 ★ 如表有簇索引,行定位器就是该行的簇索引键值。 ★ 索引行:

非簇索引键值 以簇索引方式存储:行定位器(非簇索引键值行的磁盘地址)不是以簇索引方式存储:行定位器(非簇索引键值簇索引键值)

Page 16: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

★ 每个表最多可以有 249 个非簇索引,每个索引均可以提供对数据的不同排列次序的访问。

★ 对于索引视图,只能为已经定义了簇索引的视图创建非簇索引。

★由于非簇索引使用索引页存储,因此它比簇索引需要较少的存储空间,但检索效率比簇索引低。

★下列情况,可以考虑使用非簇索引: ① 、含有大量惟一值的字段。 ② 、返回很小的或者单行结果级的检索。 ③ 、使用 ORDER BY 子句的查询。

Page 17: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现( 4 )、 FILLFACTOR :指定各索引页叶级的填满程度(百分

比)。 ★ 如果某个索引页填满, SQL Server 必须花时间拆

分该索引页,以便为新行腾出空间,这需要很大的开销。 ★ 所以要指定合适的填充因子。 ★填充因子的原始值将在系统表 sysindexes 中与索引

一起存储。 ★指定了填充因子后, SQL Server 会向上舍入每页

要放置的行数。 例如:填充因子 =40 的簇索引,如果 SQL Server 计算出

每页空间的 40% 为 6.3 行,向上舍入后,每页就放置 7 行。 ★填充因子可以设置为: 0 到 100 。 默认值为 0 ,只填满叶级页。可以执行系统存储过

程 sp_configure更改默认的填充因子设置。

Page 18: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

★填充因子为 1 到 99 时,则 SQL Server 在创建叶级页时不完全填充新索引,只填充到 1% 到 99% 。

例如:① 、对于频繁进行大量数据插入或删除的表: 在建立索引时应为将来生成的索引数据预留较大的空间,即将 fillfactor设得较小。否则,索引页会因数据的插入而很快填满,并产生分页,而分页会大大增加系统的开销。如果设得过小,又会浪费大量的磁盘空间,降低查询性能。

所以,对于此类表通常设一个大约为 10 的 fillfactor 。② 、对数据不更改、高并发、只读的表: fillfactor 可以设到 50

以上,甚至 100 。 ★注意:用某个填充因子创建蔟索引时会影响数据占

用存储空间的数量,因为 SQL Server 在创建蔟索引时会重新分布数据。

Page 19: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现( 5 )、 PAD_INDEX :指定维护索引用的中间级中每个索引页

上保留的可用空间。 ★ PAD_INDEX选项只有在指定了 FILLFACTOR 时才

有用,因为 PAD_INDEX 使用由 FILLFACTOR 所指定的百分比。

★ 中间级索引页上的行数无论 FILLFACTOR 的值有多小,永远都不会小于两行。

★ 默认:给定中间级页上的键集, SQL Server 将确保每个索引页上的可用空间至少可以容纳一个索引允许的最大行。

★ 如果 FILLFACTOR指定的百分比不够大,无法容纳一行, SQL Server 将在内部使用允许的最小值替代该百分比。

Page 20: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 6 )、 IGNORE_DUP_KEY :用于控制当尝试向属于惟一索引(包括惟一簇索引和惟一非簇索引)的列插入重复的键值时所发生的情况。

例如:当执行创建重复键的 INSERT语句时。 ★ 没指定选项:发出一条警告信息,并回滚; ★指定后选项:只发出一条警告信息,并忽略重复的行。

Page 21: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 7 )、 DROP_EXISTING :用于在创建索引时删除并重建指定的已存在的索引,如果指定的索引不存在,系统会给出警告信息。

★由于非簇索引中包含簇索引的键值,所以如果删除簇索引,必须重建非簇索引(系统自动)。

★ DROP_EXISTING 可以提高性能,因为它代替了 DROP INDEX 和 CREATE INDEX 。

★非簇索引只需重建一次,而且只是在簇索引键不同的情况下才需要。 P141

★ 不能使用它将簇索引转换成非簇索引。但是,可以将惟一簇索引更改为非惟一索引,反之亦然。

Page 22: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现( 8 )、 STATISTICS_NORECOMPUTE :指定过期的索引统

计不进行自动重新计算。 ★ 若要恢复自动更新统计,可执行没有 NORECOMPU

TE选项的 UPDATE STATISTICS命令。 ★注意:如果禁用分布统计的自动重新计算,可能会防碍 SQL Server 查询优化器为涉及该表的查询选取最佳执行计划。

( 9 )、 SORT_IN_TEMPDB :指定用于生成索引的中间排序结果将存储在 tempdb 数据库中。

★ 如果 tempdb 数据库与用户数据库不在同一磁盘集上,则使用此选项可能会减少创建索引所需的时间,但会增加创建索引时使用的磁盘空间。

Page 23: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

2 、例题: ( 1 )、【例 7-1】:为 XS_KC 表创建一个简单索引 IX_ 学号,该索引只包含一个索引列即学号列,且按升序排序。 ( P141 )

CREATE INDEX IX_ 学号 ON XS_KC (学号) ( 2 )、 【例 7-2 】 :对【例 7-1】作修改,将索引列由学号一列改为学号和课程号两列。( P142 )

CREATE INDEX IX_ 学号 ON XS_KC (学号,课程号) WITH DROP_EXISTING

Page 24: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现 ( 3 )、【例 7-3】:对【例 7-2】修改,是该索引变为了惟一簇索引。 CREATE UNIQUE CLUSTERED INDEX IX_ 学号 ON XS_KC (学号,课程号) WITH DROP_EXSTING

( 4 )、【例 7-4】:对【例 7-3】修改,设置页面的填充因子。 CREATE UNIQUE CLUSTERED INDEX IX_ 学号 ON XS_KC (学号,课程号) WITH PAD_INDEX FILLFACTOR=50 DROP_EXISTING

Page 25: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 5 )、【例 7-5】:显示了为视图创建索引的方法。首先创建一个基于 XSQK 表和 XS_KC 表的视图 v_XSQK_KC ,它包含了 XS_KC ,它包含了XS_KC 表中成绩及格的所有学生信息。

-- 创建基于 XSQK 表和 XS_KC 表的架构绑定的视图CREATE VIEW v_XSQK_KCWITH SCHEMABINDINGASSELECT XSQK. 学号, XSQK.姓名, XS_KC.课程号, XS_KC.成绩FROM dbo.XSQK , dbo.WHERE XS_KC. 学号 =XSQK. 学号 AND XS_KC.成绩 >=60-- 为架构绑定的视图 v_XSQK_KC 创建惟一簇索引CREATE UNIQUE CLUSTERED INDEX IVX_ 学号ON v_XSQK_KC( 学号,课程号 )WITH PAD_INDEX , FILLFACTOR=50

Page 26: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

二、使用 SQL Server 的企业管理器创建索引 填充索引 ----PAD_INDEX选项三、使用 SQL Server 的索引管理器创建索引 1 、操作: 企业管理器选择“数据库文件夹”(如: a )选择表(如: XS_K

C )

操作所有任务管理索引 或 打开“索引管理器”所有表和视图新建 右击所有任务管理索引 2 、例:为 KC 表创建一个基于“授课教师”列的索引 IX_授课教师,并按升序排列。

( P144—P145 )

Page 27: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现 3 、使用索引管理器,可以方便地查看数据库中表和视图所拥

有的全部索引。 4 、通常, SQL Server 在查询时会根据查询优化器的优化自

动选择合适的索引; 我们也可以在查询时,强制使用指定的索引。 5 、强制使用索引:(两种方法) ( 1 )、 SELECT 列名 1[ ,… n] FROM 表名 1[ ,… n] WITH ( INDEX (索引名)) WHERE 逻辑表达式

( 2 )、 SELECT 列名 1[ ,… n] FROM 表名 1[ ,… n] WITH ( INDEX= 索引号) WHERE 逻辑表达式

Page 28: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

6 、说明:★索引号:表示第几个索引。 0 :以堆方式扫描表,即不使用任何索引; ★ 索引号 = 1 :表示使用簇索引; 2—-251 :表示使用指定的非簇索引。 (从系统表 sysindexes 中可以查出各索引号所代表的具体索引)

【例 7-6】:使用强制索引的第一种语法形式强制使用指定的索引进行查询。 P146

SELECT 学号,课程号,成绩 FROM XS_KC WITH ( INDEX ( IX_ 学号)) WHERE 成绩 >=60

Page 29: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

【例 7-7】:使用强制索引的第二种语法形式强制使用指定的索引进行查询。 P146

SELECT 学号,课程号,成绩 FROM XS_KC

WITH ( INDEX=1 ) WHERE 成绩 >=60

7 、系统表 sysindexes (联机丛书) ★ name 列:表示索引名。 ★ indid 列:表示索引号。 ★ id 列:表示索引所在对象的标识号,该标识号

与它代表的对象名存储在系统表 sysobjects 中

Page 30: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

四、使用索引向导创建索引 企业管理器选择数据库工具菜单“向导”“创建索引向导”

五、利用索引优化向导创建索引 ● 索引优化向导是创建索引工具,使用查询优化器分析工作中的查询任务,向有大量工作负荷的数据库推荐最佳的索引创建方式,以加快数据库的查询速度,优化整个查询语句的性能。

● 索引优化向导允许为 SQL Server 数据库选择和创建一种理想的索引组合和统计,而不要求用户深入了解数据库结构或 SQL Server内部的工作情况。

Page 31: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

1 、索引优化向导可以完成以下几方面的工作: ( 1 )、根据给定的工作负荷,通过使用查询优化器分析该工

作负荷中的查询,为数据库推荐最佳索引组合。 ( 2 )、分析所建议的更改将会产生的影响,包括索引的使用、

查询的表之间的分布以及查询在工作负荷中的性能。 ( 3 )、推荐为执行一个小型的问题查询集而对数据库进行优

化的方法。 ( 4 )、通过设定高级选项,如磁盘空间约束、最大查询语句

数和每个索引最多对应字段数等,允许定制推荐方式。

Page 32: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现2 、利用索引优化向导创建和优化索引,步骤: ( 1 )、开始程序 Microsoft SQL ServerSQL 事件探测器 文件 跟踪。

( 2 )、连接到 SQL Server Windows 身份验证( W )确定。

( 3 )、跟踪属性系统自动给出跟踪名,默认“无标题 -1” 修改跟踪名为“ index_student” 选中“另存为文件( S ):”复选框 输入要创建的跟踪文件名称“ index_student.trc” 。

( 4 )、单击“运行”按钮 在窗口下部的状态拦中出现提示信息:“跟踪正在运行”

( 5 )、在企业管理器中,选中数据库 a 工具菜单中的“向导”选项 管理索引优化向导 单击“确定”或双击“索引优化向导 ”

Page 33: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 6 )、下一步 选择服务器和数据库: ★服务器:可以选择服务器(这里使用默认)。 ★ 数据库:选择要进行索引优化的数据库(这里选择 a )。 ★ 保留所有现有索引( K ):表示保存已经存在的索引,

如果不选择此项,在进行索引优化时可能会删除一些索引(这里选择)。

★选择适中

Page 34: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

( 7 )、下一步 指定工作负荷:可以选择要进行索引优化的数据库的工作负荷记录文件。

★我的工作负荷文件:指定工作负荷文件(这里选用)。 ★SQL Server跟踪表:选择用于优化索引的数据库和 SQL

Server 表。 在弹出的“打开跟踪文件”中,找到前面建立的文件( in

dex_student.trc )所在的文件夹,并选种 index_student.trc文件 打开

★ 高级选项:查看或更改默认索引优化参数(这里接受默认设置)。

( 8 )、下一步 选择要优化的表(这里选 xsqk )正在优化 ( 9 )、索引建议:显示了经过分析后对创建索引的建议。 ( 10 )、单击“分析”按钮:查看分析的详细信息。 ( 11 )、下一步 完成

Page 35: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.1.2 索引的删除一、使用 DROP INDEX命令删除索引1 、从当前的数据库中删除一个或多个索引,必须为每个要删除

的索引指定其所在的对象名(即表名或视图名)。2 、语法形式: DROP INDEX { 表名 .|视图名 .} 索引名 [ ,… n] ★注意:①、不能对系统表的索引使用该命令; ② 、不能使用 DROP INDEX命令删除通过定义主关

键字( PRIMARY KEY )约束或惟一性( UNIQUE )约束创建的索引, 如果要删除这类为实现 PRIMARY KEY 或 UNIQUE 约束而创建的索引,必须删除相应的约束;

③ 、如果删除簇索引,系统将重建所有非簇索引以便使用行指针替换簇索引键集;(删除索引视图的簇索引时,将自动删除同一视图上的所有非簇索引)。

Page 36: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

④ 、如在大容量装载之后,应用新的填充因子或重新组织数据: P147

使用 CREATE INDEX命令和 DROP_EXISTING选项 >>先用 DROP INDEX命

令再使用 CREATE INDEX命令 (更有效)(特别对于簇索引) (可以对重建进行优化,以避免重建两次非簇索引的开销。) ⑤ 、 DBCC DBREINDEX命令:具有不需要知道索引结

构的优点。重建指定数据库中表的一个或多个索引(具体操作见:联机丛书)。

Page 37: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

3 、例 6-8 :删除分别基于 XS_KC 表的索引 IX_ 学号和基于 v_XSQK_KC视图的索引 IVX_ 学号。( P147 )

DROP INDEX XS_KC.IX_ 学号, v_XSQK_KC. IVX_ 学号

Page 38: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

二、使用 SQL Server 的企业管理器删除索引

企业管理器选择“数据库文件夹”(如: a )选择表(如: 操作设计表XS_KC ) 或 点击 打开“索引 / 键” 右击设计表 从索引下拉列表 中,选择要删除的索引删除。

Page 39: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

三、使用 SQL Server 的索引管理器删除索引

企业管理器选择“数据库文件夹”(如: a )选择表(如: 操作所有任务管理索引 XS_KC ) 或 右击所有任务管理索引

打开“索引管理器”所有表和视图选择要删除的索引删除。

7.1.2 全文索引的建立 要安装Microsoft Search服务,启动 SQL Server全文搜索服务。

Page 40: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.2 约束和默认 ● 保证数据完整性:约束、默认、规则、触发器等来

保证。 ● 约束包括:①、 PRIMARY KEY :主关键字约束。

(代码: P62;界面: P75 ) ② 、 FOREIGN KEY :外关键字约束。 ③ 、 UNIQUE :惟一性约束。 ④ 、 CHECK :检查约束。 ⑤ 、 NOT NULL :非空值约束。 ⑥ 、 DEFAULT :默认值约束。 ● 约束、默认值约束在 CREATE TABLE 或 ALTER T

ABLE命令时定义的,与表存储在一起,删除表时,将一起删除。

● 默认(默认值对象)使用 CREATE DEFAULT命令定义,作为一种数据库对象单独存储,可被多次应用于不同列,所以删除表时不会删除默认对象。

Page 41: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.2.1 约束的定义和删除 1 、约束的定义: P156 、 P60

( 1 )、命令方式 ( 2 )、企业管理器(界面方式) 2 、约束的删除: ( 1 )、命令方式 ( 2 )、企业管理器(界面方式)

Page 42: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.2.2 默认值对象的定义、使用和删除 1 、默认值对象的定义 ( 1 )、语法形式: CREATE DEFALUT 默认值对象名 AS 常量表达式 说明:★常量表达式:常量、算术表达式和 SQL S

erver函数等组成(不包含任何列名或其他数据库对象)。 ★ 字符和日期数据:用单引号(‘)括起来。

★ 二进制数据:以 0x 作前导符。 ★ 货币型数据:以美元符号( $ )开头。 ★ 其他数据类型:不需要任何定界符。

Page 43: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现 ( 2 )、【例 7-14】:定义字符、日期、二进制、货币和整数类型的默认

值对象。( P156 ) CREATE DEFAULT DFO_char AS ‘ 计算机’ GO CREATE DEFAULT DFO_date AS ‘2003-1-1 10:00:00’ GO CREATE DEFAULT DFO_binary AS 0xFFFF GO CREATE DEFAULT DFO_money AS $100 GO CREATE DEFAULT DFO_int AS 100 GO ( 3 )、使用企业管理器: P157

Page 44: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

2 、默认值对象的使用 ● 定义了默认值对象后,还必须将其绑定到表中的列

或者用户自定义数据类型上。 ● 如果默认值对象的值和要绑定的列或或者用户自定

义数据类型不兼容,那么在试图插入默认值时(不是在绑定时),将返回错误信息。

( 1 )、使用系统存储过程 sp_bindefault : ① 、语法形式: sp_bindefault[@defname= ] 默认值

对象名, [@objname= ]’object_name’ [,[@futureonly= ]’futureonly_flag’] ② 、参数说明:★ object_name :为绑定对象的名称。“表名 . 列名”;否则表示用户自定义数据类型。 P157

★ futureonly_flag : P157

Page 45: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

③ 、【例 7-15】:将【例 7-14】中定义的默认值对象 DFO_char绑定到 XSQK 表的所在系列。 (P158)

sp_bindefault DFO_char,’XSQK. 所在系’( 2 )、取消对表中的列或者用户自定义数据类型的绑定。 ① 、使用系统存储过程 sp_unbindefault ,语法: ② 、参数说明: ③ 、【例 7-16 】 :取消【例 7-15】中默认值对象 DFO_ch

ar 的绑定。 (P158)

sp_unbindefault ‘XSQK. 所在系’ ( 3 )、使用企业管理器进行默认值对象的绑定和取消操作。

P158

Page 46: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

3 、默认值对象的删除 ( 1 )、使用命令方式 ① 、语法形式: ② 、参数说明: ③ 、【例 7-17】:删除【例 7-14】中定义的默认值对象。

( P159 ) DROP DEFAULT DFO_char,DFO_date,DFO_binary,

DFO_money,DFO_int

( 2 )、使用企业管理器删除默认值对象。

Page 47: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

7.3 数据完整性 ● 数据完整性:是 SQL Server 系统为了保证数据的完整性、

一致性和安全性而提供的一种重要技术,它包括域完整性、实体完整性和参照完整性。

7.3.1 域完整性(列完整性)的实现:限制用户往列中输入内容,保证给定列的输入有效性。

一、实现域完整性的方法(三种)( 1 )、限制列值的数据类型。

Page 48: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现( 2 )、限制列值的格式,可以通过使用检查约束和规则来实现。 例 7-18 :创建一个检查约束,限制联系电话的格式“区号 -电话号码” ALTER TABLE XSQK ADD CONSTRAINT CH_ 联系电话格式 CHECK (联系电话 LIKE ‘_ _ _ _-_ _ _ _ _ _ _ %’ ) 如执行“( 0517 ) 12345678” 时,系统会提示出错。 外关键字约束 检查约束 ( 3 )、限制列值的取值范围,可以通过: 默认值约束 来实现。 默认值对象 非空约束 规则 例( P161 ):“性别 =1 OR 性别 =0”

Page 49: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

二、检查约束和规则的区别:

删除表时 关联(每个列)检查约束 被自动删除 多个规则 不被删除 一个

三、规则的定义、使用和删除操作

1 、规则的定义

( 1 )、语法形式: CREATE RULE 规则对象名

AS 逻辑表达式

参数说明:逻辑表达式 P161

Page 50: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

【例 7-19】:定义一个规则对象,限制联系电话的格式为“区号 -电话号码”( P161 )

CREATE RULE RO_ 联系电话格式 AS @ 联系电话 LIKE‘____-______%’

( 2 )、使用企业管理器方式: “规则”对象“操作” “新建规则” 输入内容

Page 51: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现2 、规则的使用 ( 1 )、使用 sp_bindrule 的语法方式: sp_bindrule[@rule

name=]规则对象名, [@objname=]’object_name’ [,[@futureonly=]’futureonly_flag’] 参数说明: P162 【例 7-20】:将【例 7-19】中定义的规则对象 RO_ 联系电话格式绑定到 XSQK 表的联系电话列。( P162 )

sp_bindrule RO_ 联系电话格式,‘ XSQK. 联系电话’

● 使用存储过程 sp_unbindrule取消绑定 语法形式: sp_unbindrule[@objname=]’object_name’ [,[@futureonly=]’futureonly_flag’] 参数说明: P162

Page 52: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

【例 7-21】:取消【例 7-20】中规则对象 RO_ 联系电话格式的绑定。( P162 )

sp_unbindrule ’XSQK. 联系电话’( 2 )、使用企业管理器方式: “规则”对象“操作” “属性” “绑定列” 确定

Page 53: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现

3 、规则对象的删除 ( 1 )、命令方式的语法形式: DROP RULE 规则对象名 [ ,… n]

【例 7-22】:删除【例 7-19】中定义的规则对象 RO_ 联系电话格式。( P164 )

DROP RULE RO_ 联系电话格式

( 2 )、使用企业管理器方式: “规则”对象“操作” “删除” ★注意:如未取消其所有的绑定,则无法删除。

Page 54: 数据库原理与应用 锦州师范高等专科学校 计算机系

23/4/19

第七章 索引与数据完整性的实现7.3.2 实体完整性的实现(行完整性):表 中的每一行都必须

能够惟一标识,且不存在重复的数据行。一、实现的方法:(两种) ( 1 )、强制表的标识符列,可以使用 IDENTITY属性来实现。 ( 2 )、保证键值的完整性,这可以通过主关键字约束、唯一

性约束和索引来实现。7.3.3 参照完整性的实现:当一个表引用了另一个表中的某些数

据时,要防止非法的数据更新,如插入、修改或删除,以保证表之间已定义的关系。

● 实现参照完整性主要通过外关键字约束来实现。 P165 ● 使用参照完整性, SQL Server 将禁止用户进行的操作:

1 )、禁止在外关键字列中引用参照列中不存在的列值。 2 )、禁止修改外关键字的列值,而不修改参照列中被引用的

相应列值。 3 )、禁止在参照表中删除仍被其他表中外关键字列引用的列

值所在数据行。