第 7章 索引与视图
7,1索引的定义与类型
7,2创建索引
7,3视图的基本概念及作用
7,4创建视图
7,5通过视图修改数据库信息
7.1 索引的定义与类型
7.1.1 索引的定义
索引是一个单独的,物理的数据库结构 。 它是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表 。
索引可以提供对一个表中的数据的有效访问它可以用于加速数据的检索和强制唯一性限制 。
7.1.2 索引的类型
如果一个表没有创建索引,则数据行不按任何特定的顺序存储,这种结构称为堆集 。 在 SQL Server 2000的数据库中按存储结构的不同将索引分为两类:簇索引
( Clustered Index) 和非簇索引 ( Nonclustered Index)
根据索引键的组成,可把索引分为三种类型:惟一索引,复合索引和覆盖索引 。 返回目录
7.2 索引的创建
在 SQL Server 2000中,可使用 Enterprise Manager创建索引,也可以利用
T-SQL语句建立索引 。
1.使用 Enterprise Manager创建索引
2.利用 CREATE INDEX命令建立索引
T-SQL语句的 CREATE INDEX命令既可以创建一个可改变表的物理顺序的簇索引,也可以创建提高查询性能的非簇索引 。 其语法格式如下:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name ON {table | view } column [ ASC | DESC ] [,...n])
[WITH
[PAD_INDEX]
[ [,] FILLFACTOR = fillfactor]
[ [,] IGNORE_DUP_KEY]
[ [,] DROP_EXISTING]
[ [,] STATISTICS_NORECOMPUTE]
[ [,] SORT_IN_TEMPDB]
]
[ON filegroup]
返回目录
各参数说明如下
UNIQUE:表示创建一个惟一索引 。
CLUSTERED:指明创建的索引为簇索引 。
NONCLUSTERED:指明创建的索引为非簇索引 。
index_name:指定所创建的索引的名称 。
Table:指定创建索引的表的名称 。
View:指定创建索引的视图的名称 。
ASC | DESC:指定特定的索引列的排序方式 。 默认值是升序 ASC。
Column:指定被索引的列 。
PAD_INDEX,指定 填充 索引 的内 部 节点 的行 数 。
IGNORE_DUP_KEY:用于确定对一个惟一约束中的列中插入重复数据时的处理方式 。
DROP_EXISTING:指定要删除并重新创建簇索引 。
ON filegroup:指定存放索引的文件组 。
返回目录
返回目录
【 例 7.1】 为 users表的用户名列创建索引 。
Use users
Create index user_id on username
with
pad_index,
fillfactor = 9,
ignore_dup_key,
drop_existing,
statistics_norecompute
on [primary]
返回目录
7.3 视图的基本概念及作用
7.3.1 视图的概念
视图是从一个或多个表或视图中导出的表,其数据列和数据行来源于其所引用的表,当视图被引用时,其数据是动态生成的,它是一张虚表 。 对视图的操作与对表的操作一样,可以对其进行查询,修改,删除和更新 。
7.3.2 视图的作用
视图可以用来访问一个整表、部分表或组合表。使用视图有以下几点作用:
1,集中数据
2,简化操作
3,共享数据
4,合并分割数据
5,提高安全性 返回目录
7.4 视图的创建
在 SQL Server 2000中,可以使用 Enterprise Manager或视图向导创建视图,也可以利用 T-SQL语句的 CREATE VIEW命令来创建视图 。
1.使用 EnterpriseManager创建视图
2,利用 CREATE VIEW 命令创建视图
使用 T-SQL 语句中的 CREATE VIEW 命令创建视图,其语法格式为:
CREATE VIEW [<database_name>.][ < owner
>.]view_name[(column_name[,...n ] ) ]
[ WITH < view_attribute > [,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
< view_attribute >,:=
{ ENCRYPTION | SCHEMABINDING | VIEW_METADATA }
返回目录
各参数的含义说明如下:
database_name,表示数据库名; owner:表示所有者名;
view_name:表示视图名称 。
column _name:表示列名,它是视图中包含的列,可以有多个列名 。
WITH view_attribute:指出视图的属性 。 view_attribute
可 以 取 以 下 的 值,( 1 ) ENCRYPTION ( 2 )
SCHEMABINDING( 3) VIEW_METADATAAS:指对视图执行的操作 。
select_statement,用来创建视图的 SELECT 语句 。
COMPUTE或 COMPUTE BY 子句; 不能使用 INTO关键字;不能在临时表或表变量上创建视图 。
WITH CHECK OPTION:保证在对视图执行数据修改后,
通过视图仍能够看到这些修改的数据 。
返回目录
【 例 7.2】 创 建一 个 user_name视图,包括用 户 名 为 chen
的用 户 ID,phone,Email。
create view user_name(id,username,phone,Email)
as
select
id,username,phone,Email
from users
where username= ‘chen’
WITH CHECK OPTION
返回目录
7.5 通过视图修改数据库信息
视图的功能除了可以浏览要查询的数据结果之外,也可以用来添加,修改或删除数据库中的数据 。 但是,如果要使用视图来更新数据时,最好是针对某一个表来做添加,修改或删除数据的操作 。
在视图内,不管是要添加数据,还是修改或删除数据,都可以通过使用 INSTEAD OF 的触发器,并配合 T_SQL语句中的
INSERT,UPDATE以及 DELETE命令即可 。
7.5.1在视图中添加数据
通过视图添加数据时,必须要搭配 INSERT语句来添加数据 。 在视图内通过 T_SQL中的 INSERT语句来添加的数据是存储在基本表内的 。
INSERT语句的声明语法格式如下:
INSERT INTOview_name(columnl,column2,…)
VALUES(Values1,values2,...)
返回目录
【 例 7.3】 向 user_name 视 图 中 添 加 一 条 记 录,
( ’ 005’,’chen’,’85280225’,’chen@163.com’)
INSERT INTO user_name
VALUES( ’ 005’,’chen’,’85280225’,’chen@163.com’)
返回目录
7.5.2 在视图内修改数据
在视图内使用 T_SQL中的 UPDATE语句修改数据 。
UPDATE语句的声明的语法格式如下:
UPDATE view_name
SET column_name=column_name
WHERE conditon
【 例 7.4】 将 user_name视图中的用户 Id修改为 ‘ 001’。
UPDATE user_name
SET id=’001’
返回目录
7.5.3 在视图内删除数据
在视图内使用 DELETE语句删除数据,其语句的声明语法格式如下:
DELETE FROM view_name
WHERR conditon
在视图内删除数据时,必须要注意的是:在定义视图的 FROM子句内,只能列出表名,这就表示在视图内一次只能针对一个表内的记录来删除。对于依赖于多个基本表的视图(不包括分区视图),不能使用 DELETE语句。
【 例 7.5】 删除 user_name视图中的用户 ID为’ 005’的记录。
DELETE FROM user_name
WHERE ID=’005’
返回目录