SQLServer_第7章 索引与数据完整性

本文介绍了数据库中的索引创建与管理方法,包括聚集索引和非聚集索引的区别及其创建命令。同时,详细阐述了数据完整性概念,如域完整性、实体完整性和参照完整性的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7 索引与数据完整性

7.1 索引

在数据库建立索引主要有以下作用:

(1)       快速存取数据;

(2)       保证数据记录的唯一性;

(3)       实现表与表之间的参照完整性;

(4)       在使用order bygroup by子句进行数据检索时,利用索引可以提高排序和分组的效率。

7.1.1 索引的分类

1.聚集索引

聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。SqlServer2000是按B树组织聚集索引的,B树的叶节点存放数据页信息。对查找记录很有效。

一个表只能有一个聚集索引。

2.非聚集索引

非聚集索引是完全独立于数据行的结构,SqlServer2000是按B树组织聚集索引的,B树的叶节点存放非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。

如果在一个表中既要聚集索引又要非聚集索引,应该先创建聚集索引后创建非聚集索引。

7.1.2 索引的创建

1.通过企业管理器建立索引

2.通过SQL命令建立索引

语法格式:

Create [unique]  /*是否是唯一索引*/

[clustered  |  nonclustered]  /*索引的组织方式*/

Index index_name   /*索引名称*/

On { table |view} (column [asc |desc],…n)   /*索引定义的依据*/

[with <index_option>[,…n]]              /*索引选项*/

[on filegroup]                          /*指定索引文件所在的文件组*/

<index_option>::=

{

       PAD_INDEX

       | FILLFACTOR =fillfactor

       | IGNORE_DUP_KEY

       | DROP_EXISTING

       | STATISTICS_NORECOMPUTE

       | SORT_IN_TEMPDB

}

例子:/*kc表的课程名列创建索引*/

if exists(select name from sysindexes where name='kc_name_ind')

       drop index kc.kc_name_ind

go

create index kc_name_ind on kc(kc_name)

go 

例子:/*依据课程号为kc表创建唯一聚集索引*/

create unique clustered index kc_id_ind on kc(kc_name)

7.1.3 索引的删除

7.2 默认值约束及默认值对象

7.2.1 在表中定义默认值约束

1)入学日期  datetime Constraint datedflt default getdate(),Constraint datedflt可以省略。

2)在修改表时定义一个字段的默认值约束

例子:

Alter  table xs

Add adddate1 smalldatetime null

Constraint AddDateDflt1 default getdate() with values

其中with values为表中的现有数据添加默认值

3)删除默认值约束

Drop constraint Constraint_name

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

使用步骤:新建 绑定

(1)       使用企业管理器

(2)       使用SQL命令

l           定义default对象的命令:create  default default_name as constant_expression

l           通过系统存储过程sp_bindefault将其绑定到列或用户定义数据类型。

例子:/*xs表中的总学分字段的初始值设为0*/

create default stu_total_credit_default_value as 0

exec sp_bindefault 'stu_total_credit_default_value' ,'xs.stu_total_credit'

例子:

/*book表定义today的默认值,并将其绑定到book表中的hire_date*/

alter table book

add hire_date datetime

 

create default today as getdate()

exec sp_bindefault 'today' ,'book.hire_date'

删除步骤:

解除绑定 sp_unbindefault à删除  drop default  default_name

7.3 数据完整性

7.3.1 域完整性的实现

1Check约束的定义与删除

注意:对于timestampidentity列不能使用check约束

1 通过企业管理器添加和删除

2SQL命令

定义表时:Check_name check (logical expression)

修改表时:add constraint Check_name check (logical expression)

例子:

alter table xs_kc

add constraint cj_constraint check (score<=100 and score >=0)

删除: drop constraint Check_name

例子:alter table xs_kc

drop constraint cj_constraint

2.规则对象的定义使用和删除

1)定义规则对象    Create  rule rule_name as condition_expression

2)绑定规则对象     sp_bindrule

例子:/*创建一个规则,用于限制课程号的输入范围*/

create rule kc_rule  as @range like '[1-5][0-9][0-9]'

exec sp_bindrule 'kc_rule','kc.kc_id'

例子:/*创建一个规则,用以限制输入的值只能是该规则中列出的值*/

create rule list_rule   as @list in('C语言','离散数学','微机原理')

(3)       解除绑定unbindrule

(4)       删除规则对象 drop rule  rule_name

7.3.2实体完整性的实现

通过定义primary key约束来实现实体完整性。

注意:primary key约束和unique约束的主要区别在于:

(1)       数量:一个表中只能有一个primary key 约束,但一个表中可以根据需要对不同的列建立unique约束;

(2)       取值:primary key字段的值不允许取null值,而unique字段的值可以取null值;

(3)       组织方式:primary key默认的索引类型是簇索引,而unique的默认索引类型是非簇索引。

1.  使用企业管理器建立和删除primary key约束和unique约束

2.  使用SQL命令

1)  创建表的同时创建primaryunique约束

Create table table_name

(column_name datatype

[constraint constraint_name]

Not null

Primary key  | unique

[clustered |nonclustered]

,…..n)

例子:

create table xs2

(id char(6) not null constraint id_pk primary key

,name char(8) not null

,id_card_num char(20) constraint sh_uk unique

,study_time smalldatetime constraint datedflt default getdate()

)

2)  通过修改表创建primaryunique约束

Add constraint constraint_name primary key| unique clustered|nonclustered  column[,…n]

3)  删除primaryunique约束

Drop constraint constraint_name

7.3.3 参照完整性的实现

利用foreign key定义外码,primary keyunique约束定义不允许为null值的主码,可以实现主表与从表之间的参照完整性。

1.  使用企业管理器

2.  使用SQL命令

1)  定义表的同时定义:

Column_name datatype foreign key references ref_table(ref_column)

2)  修改表定义外码约束

Add constraint constraint_name

Foreign key (column[,…n[])

References ref_table(ref_column[,…n[])

3)  删除外码

Drop constraint constraint_name

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值