98
第5第 SQL Server2000 第第第第第第第 5.1 SQL Server2000 数数数数数数数 5.2 数数数数数数数数数 5.3 数数3 数数数数数数数数数数数数数 --数数数数数数数数数数数

5.1 SQL Server2000 数据库基本操作 5.2 表和视图的基本操作 5.3 案例 3 :创建活期储蓄管理系统数据库 -- 数据库的物理设计与实现

Embed Size (px)

DESCRIPTION

5.1 SQL Server2000 数据库基本操作 5.2 表和视图的基本操作 5.3 案例 3 :创建活期储蓄管理系统数据库 -- 数据库的物理设计与实现. SQL Server2000 中一台服务器上可创建多个数据库。 SQL Server2000 中的数据库是由数据表的集合组成的,每个数据表中包含数据以及其他数据库对象,这些对象包括视图、索引、存储过程和触发器等。    数据库系统使用一组操作系统文件来映射数据库管理系统中保存的数据库,数据库中的所有数据和对象都存储在其映射的操作系统文件中。这些操作系统文件可以是数据文件或日志文件。. - PowerPoint PPT Presentation

Citation preview

第 5 章 SQL Server2000 基本操作与应用

5.1 SQL Server2000数据库基本操作 5.2 表和视图的基本操作 5.3 案例3:创建活期储蓄管理系统数据库

--数据库的物理设计与实现

第 5 章 SQL Server2000 基本操作与应用

    SQL Server2000 中一台服务器上可创建多个数据库。 SQL Server2000 中的数据库是由数据表的集合组成的,每个数据表中包含数据以及其他数据库对象,这些对象包括视图、索引、存储过程和触发器等。

   数据库系统使用一组操作系统文件来映射数据库管理系统中保存的数据库,数据库中的所有数据和对象都存储在其映射的操作系统文件中。这些操作系统文件可以是数据文件或日志文件。

第 5 章 SQL Server2000 基本操作与应用 5.1 SQL Server2000 数据库基本操作 5.1.1 SQL Server 数据库概述

数据库文件和文件组 SQL Server 的数据库由数据文件和日志文件组成。数据文

件是用来存放数据库中的数据的。数据文件又包括主数据文件和次数据文件。每个数据库都包括一个主数据文件和一个或多个日志文件,还可以有次数据文件。 主数据文件 (.mdf) :存储数据信息和数据库的启动信息。

一个数据库有且仅有一个主数据文件。 次数据文件 (.ndf) :存储主数据文件存储不下的数据信息。

一个数据库可以没有次数据文件,也可有多个次数据文件。 日志文件 (.ldf) :存储数据库的所有事务日志信息,包含

用于恢复数据库的日志信息,一个数据库至少有一个日志文件,也可以有多个日志文件。

第 5 章 SQL Server2000 基本操作与应用

数据库文件组   为了方便管理、提高系统性能,将多个数据库文件组

织成一组,即称为数据库文件组。数据库文件组控制各个文件的存放位置,常常将每个文件建立在不同的硬盘驱动器上。这样可以减轻单个硬盘驱动器的存储负载,提高数据库的存储效率,从而实现提高系统性能的目的。

在使用数据库文件和文件组时,应该注意以下几点: 1) 每个文件或文件组只能用于一个数据库。 2) 每个文件只能属于一个文件组。 3) 日志文件是独立的。数据库的数据和日志信息不能放在

同一个文件或文件组中,数据文件和日志文件总是分开的。

第 5 章 SQL Server2000 基本操作与应用

系统数据库和示例数据库 SQL Server 支持系统数据库、示例数据库和用户数据库。 系统和示例数据库是在安装 SQL Server 后自动创建的,用

户数据库是由系统管理员或授权的用户创建的数据库。 系统数据库 SQL Server 的系统数据库包括以下几个数据库:

•master 数据库 是 SQL Server 的总控数据库,保存了 SQL Server

系统的全部系统信息、所有登录信息和系统配置,保存了所有建立的其他数据库及其有关信息。用户应随时备份该数据库,以保证系统的正常运行。

master 数据库中包含大量的系统表、视图和存储过程,用于保存 Server 级的系统信息,并实现系统管理。其中特有的、常用的系统表和存储过程见附录 B 和附录 C 。

第 5 章 SQL Server2000 基本操作与应用 • tempdb 数据库

tempdb 是一个临时数据库,是全局资源,它保存全部的临时表和临时存储过程。每次启动 SQL Server 时, tempdb 数据库都被重建,因此,该数据库在系统启动时总是干净的。

使用 tempdb 不需要特殊的权限。不管 SQL Server中安装了多少数据库, tempdb 只有一个。 tempdb 是系统中负担最重的数据库,几乎所有的查询都可能使用它。

•model 数据库 是一个模板数据库。每当创建一个新数据库时, SQL S

erver 就复制 model 数据库的内容到新建数据库中,因此,所有新建数据库的内容都和这个数据库完全一样。

如果用户想使每个新建的数据库一开始就具有某些对象,可以将这些对象放到 model 数据库中,这样所有新建的数据库都将继承这些内容。 model 数据库中有 18 个系统表 (master 数据库中也有这些系统表 ) 、视图以及存储过程,用于保存数据库级的系统信息。

第 5 章 SQL Server2000 基本操作与应用 • msdb 数据库

msdb 数据库是一个和自动化有关的数据库。 SQL Server 代理( SQL Server Agent )使用 msdb 数据库来安排报警、作业,并记录操作员。如完成一些调度性的工作,备份和复制等。

示例数据库SQL Server 的示例数据库主要包括以下两个数据库。• pubs 数据库   一个图书出版方面的示例数据库,虽然用户可以随

时修改、甚至删除该数据库,但建议用户保留该数据库,以便更好地学习 SQL Server 。

• Northwind 数据库   一个涉及虚构的 Northwind 贸易公司在世界范围

内进出口食品的销售情况示例数据库。

第 5 章 SQL Server2000 基本操作与应用 5.1.2 创建数据库

创建数据库:就是为数据库确定名称、大小、存放位置、文件名和所在文件组的过程。 文件名称:数据文件和日志文件的名称 ( 逻辑名 ) 。文件

名必须符合命名规则。在同一台 SQL Server 服务器上,各数据库的名称是惟一的。数据库的创建信息存放在 master 数据库的 sysdatabases 系统表中。创建数据库后,系统自动把 model 数据库中的信息复制到新建的数据库中。

创建数据库之前,首先要考虑数据库的拥有者、数据库的初始容量、最大容量、增长量以及数据库文件的存放路径等因素,文件大小一般以 MB 为单位。

SQL Server 2000 中创建数据库的方法: ①使用企业管理器创建数据库 ②使用 Transact-SQL 语句创建数据库 ③使用向导创建数据库 

第 5 章 SQL Server2000 基本操作与应用 使用企业管理器创建数据库

 例:以默认形式创建 mydb 数据库,步骤如下: (1) 启动企业管理器,连接服务器,展开其树形目录,用鼠标

右键单击【数据库】文件夹,在弹出的快捷菜单中,单击【新建数据库…】打开图 5-2 所的对话框。

(2) 在【数据库属性】对话框的【名称】文本框内输入数据库名 ( 逻辑名 ) 。例如 MyDB ,这个对话框自动以该数据库名命名,系统默认用该数据库名与“ _data” 串的连接命名数据文件(见图 5-3 ),该数据库名与“ _log” 串的连接命名日志文件(见图 5-4 )。这两个不同选项卡界面内的设置,分别为数据主文件和日志文件的名称、存储位置、初始大小、所属文件组 ( 默认为主文件组 PRIMARY) 、文件是否自动增长、增长的方式和文件大小的限制等。

(3) 单击【确定】按钮,数据库就创建好了,在默认位置、采用默认设置创建了一个名为 MyDB 的数据库。

第 5 章 SQL Server2000 基本操作与应用

图 5-2 数据库属性对话框

第 5 章 SQL Server2000 基本操作与应用

图 5-3 数据文件选项卡界面

第 5 章 SQL Server2000 基本操作与应用

图 5-4 事务日志文件选项卡界面

第 5 章 SQL Server2000 基本操作与应用 使用 Transact-SQL 命令创建数据库

CREATE DATABASE database_name[ ON [PRIMARY]

[<filespec> [,…n] ] [ , FILEGROUP filegroup_name <filespec> [ , . .. n] ]  ] [LOG ON{ <filespec> [ , . .. n]} ] [FOR LOAD | FOR ATTACH ] 其中, <filespec> (文件格式)语法格式如下: ([NAME=logical_file_name,] FILENAME= ‘os_file_name’ [ , SIZE = size] [ , MAXSIZE={max_size| UNLIMITED}] [ , FILEGROWTH=growth_increment])

第 5 章 SQL Server2000 基本操作与应用

图 5-5 创建数据库 exampledbl

【例 5-1 】省略 CREATE DATABASE 命令中各选项创建一个数据库 exampledbl 。命令和执行结果见图 5-5 。

第 5 章 SQL Server2000 基本操作与应用

【例 5-2 】使用 ON 和 LOG   ON 选项创建一个数据库 exampledb2 。 命令和执行结果见图 5-6 。

图5-6

创建数据库exam

pledb2

第 5 章 SQL Server2000 基本操作与应用 用向导创建数据库

使用向导创建数据库是一种非常简单的方法。启动企业管理器,在工具菜单中选择向导即可按向导进行相应的操作。

5.1.3 修改数据库 创建数据库后,可能会由于某种原因需要对其进行修改。例

如增加和删除数据库的文件和文件组、修改文件和文件组的属性。但只有 sysadmin和 dbcreator 服务器角色成员和 DBO 才能修改数据库。

使用企业管理器修改数据库 有两种方法来修改:

① 使用企业管理器修改数据库② 使用 T-SQL 命令修改数据库

第 5 章 SQL Server2000 基本操作与应用

1

1

使用企业管理器修改数据库 步骤如下: (1) 启动企业管理器,连接服务器,展开其树形目录,展开

【数据库】文件夹,用鼠标右键单击要修改的数据库名,例如 exampledb1 ,在弹出的快捷菜单中,单击【属性】命令,则弹出如图 5-7 所示的对话框。

(2) 在 exampledb1 属性对话框【数据文件】选项卡画面中,可以修改数据库的主文件组和用户定义文件组中各数据文件的信息,包括逻辑名、物理文件名、初始长度、所属文件组及自动增长的限制等。

(3) 单击【事务日志】选项卡,在这个选项卡画面中,用户可以修改数据库的日志文件的信息,包括逻辑名、物理文件名、初始长度及自动增长的限制等。

(4) 单击【文件组】、【选项】、【权限】等选项卡,可以修改数据库的文件组、数据库选项、数据库访问权限等内容。

第 5 章 SQL Server2000 基本操作与应用

图 5-7 数据库属性对话框

第 5 章 SQL Server2000 基本操作与应用 使用 Transact—SQL 命令修改数据库

ALTER DATABASE database {ADD   FILE<filespec>[ ,... n)[TO   FILEGROUP fil

egroup_name] ADD LOG FILE<filespec>[ ,... n] [REMOVE FILE logical_file_name |ADD FILEGROUP filegroup_name |REMOVE FILEGROUP filegroup_name |MODIFY FILE <filespec> |MODIFY FILEGROUP filegroup_name filegroup_propert

y } 其中 <filespec> 语法格式如下: (NAME=logical_file_name [ , FILENAME=’os_file_name’] [ , SIZE=size] [ , MAXSIZE={max_ size UNLIMITED}] [ , FILEGROWTH= growth_increment])

第 5 章 SQL Server2000 基本操作与应用 【例 5-4 】在 exampledbl 数据库中添加一个文件组

exampledbl_group ,命令行为: ALTER DATABASE exampledbl ADD FILEGROUP exampledbl_group

【例 5-5 】将一个新的数据文件 exampledbl_data2 添加到

exampledbl 数据库的 exampledbl_group 文件组中,命令行为

ALTER DATABASE exampledb1 ADD FILE ( NAME= exampledbl_data2 , FILENAME=’c: \ mssql2000 \ exampledbl_dat

a2.mdf’) TO FILEGROUP exampledbl_group

第 5 章 SQL Server2000 基本操作与应用

【例 5-6 】修改数据文件 exampledb2 的初始长度为 2MB( 前面默认设置为 IMB) ,命令行为:

ALTER DATABASE exampledbdb2 MODIFY FILE ( NAME=exampledb2 , SIZE=2)【例 5-7 】将一个新的日志文件 exampledbl_log2 添加到 exa

mpledbl 数据库中,命令行为: ALTER DATABASE exampledbl ADD LOG FILE ( NAME= exampledbl_log2 , FILENAME=’c: \ mssql2000\ exampledbl_log2 . 1d

f’ )

第 5 章 SQL Server2000 基本操作与应用 修改数据库名

系统存储过程 sp_renamedb( 在 master 系统数据库中 ) 能够修改数据库的名称。

在使用 sp_renamedb 修改数据库名之前,必须将数据库设置成单用户模式。设置数据库为单用户模式,用户可以在图5-7 所示的数据库属性对话框中选择【选项】,在弹出的对话框中选择【限制访问】,再选中该数据库的【单用户】选项。用户也可以使用系统存储过程 sp_dboption( 在 master 系统数据库中 ) 设置【单用户】选项。

下述命令行是将 exampledbl 数据库更名为 exampledb 的完整过程 , 用 sp_helpdb 来查看。见图 5-8 。

第 5 章 SQL Server2000 基本操作与应用

图 5-8 数据库更名过程

第 5 章 SQL Server2000 基本操作与应用 5.1.4 删除数据库

使用企业管理器删除数据库 使用企业管理器删除数据库非常简单,但每次只能删除一个

数据库。方法是启动企业管理器后,展开【数据库】文件夹,单击要删除的数据库后如 exampledb2 ,用鼠标右键单击要删除的数据库名,从弹出的快捷菜单中单击【删除】命令,系统弹出警告对话框见图 5-9 ,要求用户确认是否删除该数据库,单击【是】按钮,就删除了该数据库。

使用 Transact—SOL 命令删除数据库 DROP DATABASE database_name [ ,… n] database_name 指定要删除的数据库,且一次可以删除多

个数据库。但不要随便删除系统数据库,可能会造成 SQL Server 系统崩溃。

【例 5-8 】删除数据库 exampledb,exampledb2 。 DROP DATABASE exampledb,exampledb2

第 5 章 SQL Server2000 基本操作与应用

图 5-9 删除数据库对话框

第 5 章 SQL Server2000 基本操作与应用 5.2 表和视图的基本操作

5.2.1 基本知识 SQL Server 的一个数据库中可以存储 20 亿个表,一个表最

多允许定义 1024 个列。表的行数和总大小仅受可使用空间的限制。表的每一列必须具有相同的数据类型。

命名表 在一个数据库中,允许多个用户创建表。创建表的用户称为

该表的所有者。因此,表的名称应该体现数据库、用户和表名三方面的信息。格式如下:

database_name.owner.table_name 数据类型 确定表的每列的数据类型,是设计表的重要步骤。列的数据

类型就是定义该列所能存放的数据的值。 SQL Server 2000 的数据类型很丰富,这里仅给出 SQL Se

rver 常用的数据类型。见表5-4。

第 5 章 SQL Server2000 基本操作与应用 设计表

在为一个数据库设计表之前,应该完成了需求分析,确定了概念模型,将概念模型转换为关系模型。关系模型中的每一个关系对应数据库中的一个表。

由第 1 章和第 2 章对图书管理系统的分析与设计知,若该系统的数据库为已创建的 MyDb 数据库,则需要为该数据库创建读者信息表 (Readers) 、图书信息表 (Books) 、借阅信息表 (Borrowinf) 、读者类型表( type )。

创建表的过程 , 就是将一种具体的关系 DBMS (例如 SQL Server 2000 )作为工具,实现关系模型(逻辑模型)到物理模型的转换,即关系模型的物理实现。因此,以下称关系为表,称元组为行(或记录),称属性为列(或字段)。

第 5 章 SQL Server2000 基本操作与应用

设计表时需要确定如下内容:1) 表中需要的列以及每一列的类型 ( 必要时还要有长度 ) 。2) 列是否可以为空。3) 是否需要在列上使用约束、默认值和规则。4) 需要使用什么样的索引。5) 哪些列作为主键。

表的设计要体现完整性约束的实现。实体完整性约束的体现是主键约束,即主键的各列不能为空,且主键作为行的惟一标识;外键约束是参照完整性约束的体现;默认值和规则等是用户定义的完整性约束的体现。

第 5 章 SQL Server2000 基本操作与应用

下面对 SQL Server 2000 中实现用户定义完整性的方法予以介绍 : 。 检查 (CHECK) 检查约束使用逻辑表达式来限制列上可以接受的数据。比

如,可以指定 Books 表中的定价必须大于零,这样当插入表中的图书记录的定价为 0 或负数时,插入操作不能成功执行,从而保证了表中数据的正确性。

可以在一列上使用多个检查约束,在表上建立的一个检查约束也可以在多个列上使用。

默认值 (DEFAULT) 数据库中每一行中的每一列都应该有一个值,当然这个值

也可以是空值。但有时向一个表中添加数据 ( 添加一行记录 ) 时,某列的值不能确定,或该列的值大量重复的取同一个值,这时可以将该列定义为允许接受空值或给该列定义一个默认值。

第 5 章 SQL Server2000 基本操作与应用

空值 (NULL) 空值 (NULL) 意味着数据的值不确定。比如, B

ooks 表中某一行的“出版社”列为空值,并不表示该书没有出版社,而是表示目前还不知道它的出版社。

又如,表 Books 中的书名列设置为不允许取空值,则输入数据时,必须给该列指定非空值,否则输入失败。

使用以上这些约束实施的完整性被称为声明型数据完整性,它们是作为表和列定义的一部分在语法中实现的,可以在 CREATE TABLE 语句或 ALTER TABLE 语句中定义或修改。

第 5 章 SQL Server2000 基本操作与应用 5.2.2 创建表

使用企业管理器创建表 利用企业管理器提供的图形界面来创建表,步骤如下: (1) 在树形目录中展开【服务器组】→【服务器】→【数据

库】→【 MyDb 】。 (2) 选择【表】,单击鼠标右键,在弹出的快捷菜单中选择

【新建表 ... 】命令,打开设计表对话框。 (3)如图 5-10所示,设计表对话框的上半部分有一个表格,在这个表格中输入列的列名、数据类型、长度(有的数据类型不需要指定长度,如 datetime类型的长度为固定值8)、是否可以为空,在允许空域中单击鼠标左键,可以切换是否允许为空值的状态,打勾说明允许为空值,空白说明不允许为空值,默认状态是允许为空值的。

(4) 图 5-10 所示的设计表对话框的下半部分是特定列的详细属性,包括是否是标识列、是否使用默认值等。

第 5 章 SQL Server2000 基本操作与应用

(5) 用图 5-10 所示的方法逐个定义好表中的列。 (6) 设置主键约束:选中要作为主键的列,单击工具条上的【设

置主键】按钮,主键列的前上方将显示钥匙标记,如图 5-11 所示。

(7) 鼠标右键单击表中的任意一行 ( 即任意一个列的定义 ) ,在弹出的快捷菜单中选择【属性】命令,可以打开如图 5-12 所示的表属性对话框,在该对话框中选择表选项卡,可以指定表的属性,比如表名、所有者、表的标识列等。图 5-12 中将表的名称设置为 Readers , 所有者设置为 dbo 。

(8) 在属性对话框中选择【关系】选项卡,可以设置列上的外键约束。选择【索引 /键】选项卡,可以设置列上的索引,以及主键约束和惟一性约束。选择【 check 约束】选项卡,可以设置列上的检查约束。

(9) 定义好所有列后,单击图 5-11 工具栏上的 按钮,表就创建完成了。

第 5 章 SQL Server2000 基本操作与应用

图 5-10 创建表对话框

第 5 章 SQL Server2000 基本操作与应用

图 5-11 将编号设为主键

第 5 章 SQL Server2000 基本操作与应用

图 5-12 指定表的属性

第 5 章 SQL Server2000 基本操作与应用 创建惟一性约束的步骤如下:

(1) 在如图 5-12 所示的属性对话框的【索引 /键】选项卡中,单击【新建】按钮。

(2) 在列名列表中选择要定义惟一性约束。 (3) 选中【创建 UNIQUE 】复选框,表示创建惟一性约束。 (4) 在索引名框中输入约束名,或接受默认的名字。 创建外键约束的步骤如下: (1) 在图 5-12 所示的属性对话框的【关系】选项卡中,单击【新

建】按钮。 (2) 在【外键表】下拉列表框中选择要定义外健约束的表,并在其

下的列表中选择表中要定义外键约束的列。 (3) 在【主键表】下拉列表框中选择外键引用的表,并在其下的列

表中选择表中外键引用的列。 (4) 在【关系名】框中输入约束的名称,或接受默认的名称。 (5) 选择【级联更新相关的字段】复选框指定使用级联修改。 (6) 选择【级联删除相关的记录】复选框指定使用级联删除。

第 5 章 SQL Server2000 基本操作与应用

创建检查约束的步骤如下 : (1) 在如图 5-12 所示的属性对话框的【 check 约

束】选项卡中,单击【新建】按钮。 (2) 在【约束表达式】框中输入检查表达式。 (3) 在【约束名】框中输入约束的名称,或接受默认

的名称。

第 5 章 SQL Server2000 基本操作与应用

使用 Transact-SQL 命令创建表 在 Transact-SQL中,使用 CREATE TABLE命令创建表。语法格式如下:

CREATE TABLE [database_name.[owner]. |owner.] Table_name ( { <column_definition> --列定义 |column_name AS computed_column_expression --计算列定义 |<table_contraint> } [,…n] ) [ON {filegroup|DEFAULT}] [TEXTIMAGE_ON {filegroup|DEFAULT}]

第 5 章 SQL Server2000 基本操作与应用

【例 5-9 】 创建图书信息表 Books 。 CREATE TABLE books ( 编号 char(15) PRIMARY KEY NOT NULL CONTRAINT PK_Books PRIMARY KEY, 书名 varchar(42) NULL , 作者 varchar(8) NULL , 出版社 varchar(28)NULL , 定价 real NULL CONTRAINT CK_Books CHECK( 定价 >0) )

第 5 章 SQL Server2000 基本操作与应用 【例 5-10 】 创建图书借阅信息表 Borrowinf 。

CREATE TABLE borrowinf ( 读者编号 char(8) NOT NULL REFERENCE Readers(编号 ) ON DELETE CASCADE , 图书编号 char (15) NOT NULL FOREIGN KEY ( 图书编号 ) REFERENCES Books(编号 ) ON DELETE NO ACTION, 借期 datetime NULL DEFAULT (getdate()) , 还期 datetime NULL ) ON DELETE子句有两个选项。

• NO ACTION :被其他表外键引用的行不能被删除,这是 SQL Server 7.0 以前版本的做法。

• CASCADE: 被其他表外键引用的行可以被删除,而且其他表中通过外键引用了该行的行都将被删除。

第 5 章 SQL Server2000 基本操作与应用

【例 5-11 】 创建读者信息表 readers 。 CREATE TABLE readers ( 编号 char (10) NOT NULL PRIMARY KEY,

姓名 char (8) NULL , 读者类型 int NULL , 限借阅数量 int NULL ,

借阅期限 int NULL )

第 5 章 SQL Server2000 基本操作与应用 5.2.3 修改表

可以使用 ALTER TABLE 语句或企业管理器进行表的修改。   ALTER TABLE 命令格式 ALTER TABLE table_name { [ ALTER COLUMN column_name {new_data_type[(precision[,scale])][NULL|NOT NULL] |{ADD|DROP}ROWGUIDCOL}]

| ADD { [<column_definition>] |column_name AS computed_column_expression}[,...

n] | [ WITH CHECK | WITH NOCHECK ] | ADD { <table_constraint>}[,...n] | DROP { [CONSTRAINT]constraint_name | COLUMN column } [ ,...n ] | { CHECK | NOCHECK } CONSTRAINT {ALL|constraint_name[,...n]} }

第 5 章 SQL Server2000 基本操作与应用

修改列属性 表中的每一列都有列名、数据类型、数据长度以及是否允许

为空值等属性,这些属性可以在表创建后修改。 修改列属性使用子句 ALTER COLUMN 。比如,以下的语句

将 rooks 表的出版社列改为最大长度为 30 的 varchar 型数据,且不允许空值。

ALTER TABLE Books ALTER COLUMN 出版社 varchar(30) NOT NULL 默认状态下,列是被设置为允许空值的,将一个原来允许空

值的列改为不允许空值,必须满足以下两个条件: · 表中记录在该列上均不为空值。 · 该列上没有创建索引。

第 5 章 SQL Server2000 基本操作与应用 添加和删除列

向表中增加—列时,应使新增加的列有默认值或允许为空值,如果既没有提供默认值也不允许为空值,那么新增列的操作将出错。

向表中添加列需要使用 ALTER TABLE 的 ADD子句。 例如 , 向表 books 中添加出版日期列 ,DataTime 型 , 允许

空值 , 可以使用如下语句 : ALTER TABLE books ADD 出版日期 datetime NULL

又如 , 向 readers 表中添加电子邮件地址列,且要求输入的电子邮件地址必须包含:‘@’ 符号,可以使用以下语句:

ALTER TABLE readers ADD 邮件地址 varchar(50) NULL CONSTRAINT CK_EA CHECK( 邮件地址 like , '%@%')

第 5 章 SQL Server2000 基本操作与应用 删除—列需要使用 ALTER TABLE 的子句。

比如,删除 readers 表的邮件地址列,可以使用以下语句: ALTER TABLE readers DROP COLUMN邮件地址 修改约束 如果创建表 borrowinf 时没有定义主键约束 ( 该表的主键由

读者编号、图书编号、借期 3 个属性列组成 ) ,则可以用以下语句定义主键:

ALTER TABLE Readers ADD CONSTRAINT PK_BH 表中已有的数据在这几列上需要满足以下两个条件: ·不能有重复的数据。 ·不能有空值。 删除主键约束 PK_BH ,可以使用以下语句: ALTER TABLE Readers DROP CONSTRAINT PK_BH PRIMARY KEY( 读者编号 , 图书编号 , 借期 )

第 5 章 SQL Server2000 基本操作与应用 修改约束时几个子句的说明:

(1) WITH NOCHECK子句 添加的约束只对在以后改变或插入的行发生作用,而不检

查已存在的行。 比如,要对 books 表的定价列添加约束,使定价大于 O ,

可以使用如下代码: ALTER TABLE Books WITH NOCHECK ADD CONSTRAINT CK_Books ( 定价 >0)

(2) NOCHECK CONSTRAINT子句和 CHECK CONSTRAINT子句 可以在 ALTER TABLE 语句中使用 NOCHECK CONSTRA

INT子句,使表的指定列上的检查约束无效,此时就可以添加一些不满足原来约束要求的数据了。使用 CHECK CONSTRAINT子句可以使检查约束重新有效。这两个子句后面都要用约束名作为参数。

第 5 章 SQL Server2000 基本操作与应用

例,为 readers 表添加了邮件地址列,并定义了检查约束使邮件地址必须包含“@” 符号。邮件地址列的定义如下 :

ALTER TABLE readers ADD邮件地址 varchar (50) NULL

CONSTRAINT CK_EA CHECK ( 邮件地址 like '%@%')

使用以下语句使这一约束无效 : ALTER TABLE Readers NOCHECK CONSTRAINT CK_EA

为了使约束重新有效,可使用如下语句: ALTER TABLE Readers CHECK CONSTRAINT CK_EA

第 5 章 SQL Server2000 基本操作与应用 5.2.4 向表中添加数据

创建表只是建立了表结构,之后,应该向表中添加数据。只有 System Administrator 角色成员、数据库和数据库对象所有者及其授权用户才能向表中添加数据。在添加数据时,对于不同的列数据类型,插入数据的格式不一样,因此,应严格遵守它们各自的要求。添加数据按输入顺序保存,条数不限,只受存储空间的限制。

使用企业管理器添加数据 启动企业管理器后,展开【数据库】文件夹,再展开要添加

数据的数据库(如 MyDb ) , 可以看到所有的数据库对象,单击【表】,用鼠标右击右边列表中要操作的表(例如 readers ) , 运行弹出快捷菜单中的【打开表】命令,在弹出的子菜单中单击【返回所有行】命令,打开该表的数据窗口。如图5-13 所示。在数据窗口中,用户可以添加多行新数据,同时还可以修改表中数据。使用该窗口的快捷菜单,可以实现表中数据各行记录间跳转、剪贴、复制和粘贴等。

第 5 章 SQL Server2000 基本操作与应用

图 5-13 表 Readers 的数据窗口

第 5 章 SQL Server2000 基本操作与应用 使用 Transact-SQL 命令添加数据

在 Transact-SQL 中,使用 INSERT 命令添加数据,它主要有以下几种形式:

·INSERT …VALUES: 使用 VALUES子句为所添加的数据行提供列值。

·INSERT…SELECT :将 SELECT 语句的查询结果添加到到表中。

·INSERT…DEFAULT VALUES: 将每列的默认值赋予新添加的数据行。

INSERT 命令的主要语句格式如下: INSERT [INTO] { table_name | view_name }

{ [ ( column_list ) ] { VALUES( { DEFAULT | NULL | expression }

[ , ...n] ) | select_statement | DEFAULT VALUES }

第 5 章 SQL Server2000 基本操作与应用 添加数据到一行中的所有列

INSERT readers VALUES(‘2004060001’,‘王晓奇’ ,3,2) 为表 readers 添加一行数据。 INSERT 语句中无须罗

列表中的列名,但 VALUES 提供的数据与 Readers 表的各列在数量、顺序及数据类型各方面要一一对应。

添加数据到一行中的部分列 INSERT Readers (编号,姓名,读者类型) VALUES(‘2004060003’ ,‘李亚茜’, 3) 在此情况下, INSERT 语句中必须罗列表中的列名,

并且在添加数据前应该确认没有被添加的列上应设有默认值或 NULL ,否则这条 INSERT 语句出错。语句中的列名的顺序只要与 VALUES 提供的数据一一对应即可

第 5 章 SQL Server2000 基本操作与应用 使用 INSERT…SELECT 语句添加数据

使用 INSERT子句可以将从一个或多个表或视图查询出的数据添加到表中,它可以添加多行数据,而 VALUES子句只能添加一行数据,但它们都可以给数据行的全部列或部分列添加数据。

需要注意的是被插入数据的表与 SELECT子句的结果集必须兼容,即列数、列序、数据类型都应兼容。

使用 INSERT…DEFAULT VALUES 语句添加数据 使用 INSERT…DEFAULT VALUES子句能够向表中添加

一行数据,语句为: INSERT INTO table_name DEFAULT VALUES 添加的数据行各列均为默认值,未设默认值的列,列值为

NULL 。

第 5 章 SQL Server2000 基本操作与应用 5.2.5 修改和删除表中的数据

修改表中的数据 修改表中的数据,最方便的方法是使用企业管理器。类似于

添加数据,打开表的数据窗口,如图 5-13 所示,就可以修改表中的所有数据了。但一些少量、分散的数据修改用企业管理器较合适,成批数据的修改用 UPDATE 语句更好。

语句格式如下: UPDATE { table_name | view_name } SET { column_name = { expression | DEFAULT | NULL [ ,...n]} [WHERE < search_condition >]}

第 5 章 SQL Server2000 基本操作与应用 修改所有数据行的值

【例 5-12 】利用 UPDATE 修改借阅情况表 borrowinf 的应还日期为自借期开始后的 30天之内,语句为:

UPDATE boorowinf SET 应还日期 = 借期+30 修改部分数据行的值 【例 5-13 】将读者类型表 type 中的所有学生读者的限借阅

数量增加 5 、借阅期限增加 30天,所有教师读者的限借阅数量增加 10 、借阅期限增加 60天,可用以下两个语句实现:

UPDATE type SET 限借阅数量 = 限借阅数量 +5, 借阅期限 = 借阅期限 +30 WHERE 类型名称 =‘ 学生’ UPDATE type SET 限借阅数量 = 限借阅数量 +10, 借阅期限 = 借阅期限 +

60 WHERE 类型名称 =‘教师’

第 5 章 SQL Server2000 基本操作与应用

删除表中的数据 删除表中的数据,是指删除表中某些数据行。用 Transact-

SQL 中的 DELETE 命令来实现删除操作,命令的主要语句格式如下:

DELETE [FROM] {table_name|view_name} [WHERE <search_condition>]

【例 5-14 】删除 borrowinf 表中的读者编号为: 2002060328 的读者的借书记录。

DELETE borrowinf WHERE 读者编号 =‘2002060328’

【例 5-15 】删除 readers 表中的所有记录。 DELETE readers

第 5 章 SQL Server2000 基本操作与应用 5.2.6 删除表

删除一个表时,它的结构定义、数据、约束、索引都将被永久地删除。

如果一个表被其它表通过 FOREIGN KEY 约束引用,那么必须先删除定义 FOREIGN KEY 约束的表,或删除其 FOREIGN KEY 约束。当没有其他表引用它时,这个表才能被删除,否则,删除操作就会失败。

删除一个表可以使用企业管理器或 Transact-SQL 语句。 使用企业管理器 使用企业管理器删除一个表非常简单,只需展开【服务器

组】→【服务器】→【数据库】→【表】,在右边的窗口中用鼠标右击要删除的表,在弹出的快捷菜单中选择【删除】选项,如果确定要删除该表,则在弹出的“除去对象”对话框中单击【全部除去】按钮,便完成对表的删除。

第 5 章 SQL Server2000 基本操作与应用

使用 Transact-SQL 语句 使用 DROP TABLE 语句可以删除表,其语法为: DROP TABLE table_name 需要注意的是 DROP TABLE 语句不能用来删除系统表。

【例 5-17 】删除读者类型表 type 。 DROP TABLE type

第 5 章 SQL Server2000 基本操作与应用 5.2.7 视图的创建、修改和删除

基本知识 视图常用于集中、简化和定制显示数据库中的信息。视图象

是一个过滤器,对于一个或多个基表中的数据进行筛选、引用。 每个数据库中的 sysobjects 系统表都保存了视图的有关信

息。这个系统表的 xtype 列描述数据库对象的类型,如字符V 表示视图、 S 表示系统表、 U 表示用户表; name 和 id 列分别为对象名和对象标识符,这些标识符在整个数据库中是惟一的。另一个保存视图信息的系统表是 syscomments ,表中 text 列包含了视图的定义。另外,两个与视图有关的系统存储过程 sp_helptext 能够显示某个视图的定义, sp _rename 能够在必要时更改视图的名 ( 或任何其它的数据库对象名 ) 。

一般对于视图的查询不受任何限制,但要通过视图来修改基表的数据则有一些限制。

第 5 章 SQL Server2000 基本操作与应用 创建视图

在 SQL Server 中创建视图主要有以下 3 种方法:使用向导、使用企业管理器、使用 Transact-SQL 命令。 使用向导创建视图 (1) 启动企业管理器 , 展开要操作的数据库服务器。在企业

管理器的【工具】菜单中选择【向导】项。打开【选择向导】对话框,展开【数据库】文件夹,单击【创建视图向导】项,如图 5-14 所示。单击【确定】按钮,打开创建视图的欢迎对话框 , 这个对话框向用户介绍了利用创建向导创建视图的主要步骤。

(2) 单击【下一步】按钮,打开数据库选择对话框 ( 视图必须创建在一个数据库中 ) ,在数据库下拉列表中选择所需要的数据库,如 MyDb 。

(3) 单击【下一步】按钮,打开数据表选择对话框,此对话框中可以选择一个或多个创建视图时被引用的数据表,单击数据表右侧的复选框,选中所需的数据表如 Borrowinf 。

第 5 章 SQL Server2000 基本操作与应用 (4) 单击【下一步】按钮,打开选择列对话框显示上一步选

择的所有表中的列名、列的数据类型和选择状态 ( 选择列 ) ,单击选择状态栏的复选框中选择视图中需要显示的列,如图5-15 所示。

(5) 单击【下一步】按钮,打开限制条件输入对话框,在这个对话框的文本框中输入 Transact-SQL 命令 ( 即 WHERE子句的内容 ) 用于限制视图的输出结果,这里不输入内容,如图 5-16 所示。如果不输入任何内容,则视图将所有选中表中选中列的所有数据行全部显示。

(6) 单击【下一步】按钮,打开视图名输入对话框,在输入文本框中输入创建的视图名,如 borrowinf_view 。

(7) 单击【下一步】按钮,打开对话框如图 5-17 所示,在这个对话框中系统根据上面几步用户定义视图时的所有选择,形成定义视图的 Transact-SQL 语句,用户可以直接在这个对话框中修改视图定义,最后单击【完成】按钮,视图在所选的数据库中创建完成。

第 5 章 SQL Server2000 基本操作与应用

图 5-14 选择创建视图 图 5-15 选择列对话框

第 5 章 SQL Server2000 基本操作与应用

图 5-16 限制条件输入对话框 图 5-17 完成定义视图对话框

第 5 章 SQL Server2000 基本操作与应用 使用企业管理器创建视图创建视图

(1) 启动企业管理器,展开要使用的数据库 ( 如 MyDB) 。 (2) 鼠标右击该数据库中的【视图】图标,在弹出的菜单中

选择【新建视图】命令,打开的窗口如图 5-18 所示,右键单击图标窗格打开【添加表】对话框,如图 5-19 所示。

(3) 基表或视图选择完成之后,表 books 的结构出现在视图创建 /修改窗口的数据表显示区。在表中选择需要在视图中显示的列,此时在窗口下边的视图定义列显示表格中和 SQL 语句区中也会相应地出现所选择的列和 SQL 语句,如需加入限制条件、函数或计算列,可以手动在 SQL 语句区输入,如图 5-20 所示。

(4) 单击工具栏 按钮运行所定义的视图,在视图执行结果显示区显示出这个视图的查询结果。如图 5-20 下部分所示。

用户可以发现当定义了 WHERE子句时,视图执行之后,在基表相应列的右边会出现一个图标,并且在视图定义列的表格中出现相应的列名与准则,即视图的查询条件。

第 5 章 SQL Server2000 基本操作与应用

图 5-18 新打开的创建视图对话框

第 5 章 SQL Server2000 基本操作与应用

图 5-19 添加表对话框

第 5 章 SQL Server2000 基本操作与应用

图 5-20 创建视图对话框

第 5 章 SQL Server2000 基本操作与应用 使用 Transact-SQL 命令创建视图

在 T-SQL 中,使用 CREATE VIEW 命令创建视图,格式为:

CREATE VIEW view_name [(column[ ,… n]) [WITH ENCRYPTION] AS Select_statement [WITH CHECK OPTION]

命令中的参数含义如下 :• WITH ENCRYPTION :给系统表 syscomments 中视图定义的

SELECT 命令加密。• AS :说明视图要完成的操作。• Select_statement :定义视图的 SELECT 命令。 需要特别注意, CREATE VIEW 必须是批中的惟一语句。而且视

图中的 SELECT 命令不能包括 INTO 、 ORDER BY 等子句。另外,临时表也不能在查询中引用。

• WITH CHECK OPTION :强制所有通过视图修改的数据满足 select_Statement 语句中指定的选择条件。

第 5 章 SQL Server2000 基本操作与应用

【例 5-15 】利用表 books 定义视图 v1_books ,查询 books 表中的作者 , 书名的情况。

CREATE VIEW v1 _books AS SELECT 作者 , 书名 FROM Books 可利用 sp_helptext 来查看视图的定义。例如命令: sp_helptext v1 _books 的执行结果是视图 v1_books 的定义,见图 5-21 。

第 5 章 SQL Server2000 基本操作与应用

图 5-21 查看视图

第 5 章 SQL Server2000 基本操作与应用 【例 5-16 】带条件的视图定义。定义视图 v_overdue ,

查询所有借阅超期的读者的读者编号、姓名、书名和应还日期。

该视图的定义涉及到了 borrowinf 表、 books 表和 readers 表。

CREATE VIEW v_overdue AS SELECT 读者编号 ,姓名,书名 , 应还日期 FROM borrowinf b , readers r,books WHERE b. 读者编号 =r.编号 and b. 图书编号 =books.编号 and b. 应还日期 <getdate()

视图定义后,可以向基本表一样查询。 例如,若要查询视图 v_overdue ,可以使用如下命令: SELECT * FROM v_overdue

第 5 章 SQL Server2000 基本操作与应用 【例 5-17 】定义视图 v_overdue1 ,查询借书超期的读者

姓名等情况 , 要求加密视图定义。 该视图定义涉及到了 borrowinf 表及 readers 表。 CREATE VIEW v_overdue1 WITH ENCRYPTION AS SELECT 读者编号 ,r.姓名 , 图书编号 , 应还日期 FROM borrowinf b inner join readers r

On b. 读者编号 =r.编号 WHERE 应还日期 <getdate() 在安装系统和创建数据库之后,只有系统管理员 sa 和数

据库所有者 DBO 具有创建视图的特权,此后他们可以使用 GRANT CREATE VIEW 命令将这个特权授予其他用户。此外,视图创建者必须具有在视图查询中包括的每一列的访问权。

第 5 章 SQL Server2000 基本操作与应用 使用企业管理器修改视图

视图建立之后,由于某种原因(如基表中的列发生了改变或需要在视图中增/删若干列等),需要对视图进行修改。 利用企业管理器修改视图的步骤如下: (1) 展开服务器,展开数据库。 (2) 单击【视图】图标,在窗口右边显示出当前数据库中的

所有视图。 (3) 右键单击要修改的视图名,在弹出的快捷菜单中选择

【设计视图】命令,便可进入视图设计窗口,用户可以在这个窗口中对视图进行修改。

这种方法不能修改加密过的视图定义,即使是管理员或数据库的所有者也不可以。

还有一种利用视图属性对话框修改视图的方法,用鼠标双击要修改的视图名,弹出视图属性对话框,在这个对话框中显示出定义视图的 Transact-SQL 命令,用户可以直接在这个对话框中修改。但这种方法同样只适用于未被加密的视图。

第 5 章 SQL Server2000 基本操作与应用 使用 Transact-SQL 命令修改视图

在 Transact-SQL 中,使用 ALTER VIEW 命令修改视图语法格式为

ALTER VIEW view_name [(column[ ,… n])] [WITH ENCRYPTION] AS select-statement [WITH CHECK OPTION] ALTER VIEW 命令通常用于修改视图查询的定义,语法几

乎等同于 CREATE VIEW 命令的语法。可以使用 ALTER VIEW避免为视图重新指定已有的特权,使用这个命令修改已有的视图不影响依赖于视图的存储过程。另外,如果使用DROP VIEW 和 CREATE VIEW 命令先删除再重新创建视图,使用视图的存储过程 ( 或其他应用 ) 将不能很好地工作。

如果在创建视图时使用了 WITH ENCRYPTION 选项和 WITH CHECK OPTION 选项,则在使用 ALTER VIEW 命令时,也必须包括这些选项。

第 5 章 SQL Server2000 基本操作与应用

【例 5-18 】 修改【例 5-16 】中的视图 v_overdue 。

ALTER VIEW v_overdue WITH ENCRYPTION AS SELECT 读者编号 , 图书编号 , 应还日期 FROM borrowinf WHERE 应还日期 <getdate()

第 5 章 SQL Server2000 基本操作与应用 使用视图

对于视图的使用主要包括视图的检索、通过视图对基表进行插入、修改、删除行的操作。对于视图的检索几乎没有什么限制,但是对通过视图实现表的插入、修改、删除操作则有一定的限制条件。 视图检索 视图定义之后,用户便可以像查询基本表一样查询视图。

视图的查询总是转换为对它所依赖的基表的等价查询。利用 Transact-SQL 的 SELECT 命令和企业管理器都可以对视图查询,其使用方法与基本表的查询完全一样,这里不再赘述。

利用视图操作基表的数据 视图也可以使用 INSERT 命令插入行,当执行 INSERT

命令时,实际上是向视图所引用的基表中插入了行。视图中的 INSERT 命令与基本表中使用 INSERT 命令格式完全一样。

第 5 章 SQL Server2000 基本操作与应用 【例 5-19 】 利用视图向表 borrowinf 中加入一条数据。

borrowinf_VIEW 是前面创建的视图,脚本如下 : CREATE VIEW borrowinf_VIEW AS SELECT 读者编号 , 图书编号 , 还期 FROM borrowinf

执行下面脚本: INSERT INTO borrowinf_VIEW VALUES(‘2004160426’ 、‘ F12.245’ 、‘ 2003-

12-20’)

查看结果: SELECT * FROM borrowinf WHERE 图书编号 =‘F12.245’

第 5 章 SQL Server2000 基本操作与应用

图 5-23 执行添加命令

第 5 章 SQL Server2000 基本操作与应用 如果视图中有下面所述属性,则插入、更新或删除基表将失败。

• 视图定义中的 FROM子句包含两个或多个表,且 SELECT选择列表达式中的列表包含来自多个表的列。

• 视图的列是从集合函数派生的。• 视图中的 SElECT 命令包含 GROUP BY子句或 DISTINCT

选项。• 视图的列是从常量或表达式派生的。

同样,利用视图可以更新行,改变所引用的基表中一个或多个行或列的值。

【例 5-20 】将【例 5-19 】中插入的数据删除。 DELETE FROM borrowinf_VIEW WHERE 图书编号 =‘F12.

245’ 这个例子执行后将基表 borrowinf 中的所有图书编号为‘ F1

2.245’ 的行删除。

第 5 章 SQL Server2000 基本操作与应用 删除视图

视图创建后,随时都可以删除。删除操作很简单,通过企业管理器或 DROP VIEW 命令都可以完成。 利用企业管理器删除视图 操作步骤如下: (1) 在当前数据库中单击视图图标。 (2) 在右边视图列表窗口内单击需删除的视图。 (3) 单击工具栏上的删除图标,弹出删除视图对话框,如图

5-24 所示。 (4) 单击【全部除去】按钮,将选中的视图删除。 在删除视图对话框中,单击【显示相关性】按钮显示对象

的相关性。如果某视图在另一视图定义中被引用,当删除这个视图后,如果调用另一视图,则会出现错误提示。

第 5 章 SQL Server2000 基本操作与应用

图 5-24 删除视图对话框

第 5 章 SQL Server2000 基本操作与应用

利用 DROP VIEW 命令删除视图 语法格式为 DROP VIEW {view} [ ,... n] DROP VIEW 命令可以删除多个视图,各视图名之

间用逗号分隔。 视图删除后,在系统表 sysobjects 、 syscolum

ns 、 syscomments 、 sysdepnds 和 sysprotects 中存储的关于视图的信息也会被随之删除,对视图的权限同样被删除。

【例 5-21 】 删除视图 borrowinf_VIEW 。 DROP VIEW borrowinf_VIEW

第 5 章 SQL Server2000 基本操作与应用 5.2.8 索引

SQL Server 的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力。本小节介绍索引的分类、索引的创建、修改和删除。

索引的类型 SQL Server2000 中提供了以下几种索引:

聚簇索引 在聚簇索引中,行的物理存储顺序与索引顺序完全相同,

即索引的顺序决定了表中行的存储顺序。因为行是经过排序的,所以每个表只能有一个聚簇索引。

由于聚簇索引的顺序与数据行存放的物理顺序相同,所以聚簇索引最适合范围搜索。因为找到一个范围内开始的行后可以很快地取出后面的行。

如果表中没有创建其他的聚簇索引,则在表的主键列上自动创建聚簇索引。

第 5 章 SQL Server2000 基本操作与应用

非聚簇索引 非聚簇索引并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序。索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据。非聚簇索引作为与表

分离的对象存在,所以, 可以为表中每一个常用于查询的列定义非聚簇索引。

非聚簇索引的特点使它很适合于那种直接匹配单个条件的查询,而不太适合于返回大量结果的查询。比如 readers表的姓名列上就很适合建立非聚簇索引。

为一个表建立索引默认都是非聚簇索引,在一列上设置惟一性约束也自动在该列上创建非聚簇索引。

第 5 章 SQL Server2000 基本操作与应用

惟一性索引 (Unique Indexes) 聚簇索引和非聚簇索引是按照索引的结构划分的。按照索引实现的功能还可以划分为惟一性索引和非惟一性索引。

惟一性索引能够保证在创建索引的列或多列的组合上不包括重复的数据,聚簇索引和非聚簇索引都可以是惟一性索引。

在创建主键约束和惟一性约束的列上会自动创建惟一性索引。

第 5 章 SQL Server2000 基本操作与应用 创建索引

在 SQL Server 中,索引有如下几个限制: · 只有表的拥有者才能在表上创建索引。 · 每个表上只能创建一个聚簇索引。 · 每个表上最多能创建 249 个非聚簇索引。 · 一个索引最大为 900 字节,在 char 等类型的列上创建

索引应考虑这一限制。另外,在多列上创建索引时要注意字节数的总和不要超过 900 。

· 一个索引中最多包含的列数为 16 。 另外,在创建聚簇索引时还要考虑数据库剩余空间的问题,

在建立聚簇索引时所需要的可用空间应是数据库表中数据量的 120%,这是因为在建立聚簇索引时表中的数据将被复制以便进行排序,排序完成后,再将旧的未加索引的表删除,所以数据库必须有足够用来复制数据的空间。

第 5 章 SQL Server2000 基本操作与应用 创建惟一性索引时,应保证创建索引的列不包括重复的数

据,并且没有两个或两个以上的空值。因为创建索引时将两个空值也视为重复的数据,如果有这种数据,必须先将其删除,否则索引不能成功创建。

SQL Server 有 3 种创建索引的方法:使用企业管理器、使用 Transact-SQL 语句、使用向导均可以创建索引。 用 Transact-SQL 语句创建索引 可以用 CREATE INDEX 语句在一个已经存在的表上创建

索引, CREATE INDEX 语句的格式如下:CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED

]INDEX index_name ON [table ( column [ ASC | DES

C]) [ ,...n] ] ON filegroup ] 其中, UNIQUE 、 CLUSTERED 和 NONCLUSTERED

选项指定所创建索引的类型,分别为惟一索引、聚簇索引和非聚簇索引。省略 UNIQUE 时, SQL Server 所建立的是非惟一索引;省略 CLUSTERED 和 NONCLUSTERED选项时, SQL Server 所建立的是非聚簇索引。

第 5 章 SQL Server2000 基本操作与应用 【例 5-22 】为 borrowinf 表的编号列创建一个惟一性的聚

簇索引,索引排列顺序为降序: CREATE UNIQUE CLUSTERED INDEX IX_Borrowinf_bh 0N Borrowinf(编号 )DESC 在以上代码中, CLUSTERED 关键字代表创建聚簇索引, D

ESC 关键字代表索引列的降序排序。注意在执行此命令前先删除原来该表的主关键字。

使用向导创建索引 使用 SQL Server 2000 提供的向导创建索引的步骤如下: (1) 在企业管理器树形目录中展开要使用的服务器组、服务器。 (2) 打开企业管理的工具菜单,选择【向导】命令。 (3) 在打开的选择对话框中展开【数据库】目录,选中【创建

索引向导】,并单击【确定】按钮。 (4) 接下来出现欢迎对话框,选择【下一步】按钮,然后按照

向导的提示一步—步地完成。

第 5 章 SQL Server2000 基本操作与应用 使用系统存储过程 sp_helpindex 也可以查看特定表上的

索引信息。比如,在查询分析器中执行语句: EXEC sp_helpindex Borrowinf 结果给出了 borrowinf 表上所有索引的名称、类型和建

索引的列,如图 5-25 所示。

图 5-25 查看表上的索引

第 5 章 SQL Server2000 基本操作与应用

删除索引 在企业管理器中,可以使用与创建索引和查看索引同样的方

法打开管理索引对话框,在该对话框的【现有索引】列表中选中要删除的索引,选择对话框下部的【删除】按钮,如图5-26 所示。单击【删除】按钮在出现的确认对话框中单击【是】按钮即可。

使用 T-SQL 语言的 DROP INDEX 语句可删除索引,格式为 : DROP INDEX 表名 . 索引名 以下语句删除了 borrowinf 表上的 IX_NAME 索引: DROP INDEX Borrowinf . IX_Borrowinf_bh 也可以用一条 DROP INDEX 语句删除多个索引,索引之间

要用逗号隔开。

第 5 章 SQL Server2000 基本操作与应用

图 5-26 删除索引对话框

第 5 章 SQL Server2000 基本操作与应用 5.3 案例 3 :创建活期储蓄管理系统数据

库 -- 数据库的物理设计与实现 用 SQL Server 2000 创建案例一描述的数据库

Transact-SQL 语句为: CREATE DATABASE [活期储蓄 ] ON ( NAME = ' 活期储蓄 _Data', FILENAME = 'D:\ data\活期储蓄 _Data.MDF' , SIZE = 5, MAXSIZE = 100, FILEGROWTH = 15%) LOG ON ( NAME = ' 活期储蓄 _Log', FILENAME = 'E:\ data\活期储蓄 _Log.LDF' , SIZE = 5, MAXSIZE = 200, FILEGROWTH = 5)

第 5 章 SQL Server2000 基本操作与应用 创建表

建立“储户基本信息”、“储户动态信息”、“储蓄所”、“存取款”表,并设置实体完整性、参照完整性和域检验。

Transact-SQL 语句为: 创建储户基本信息 CREATE TABLE dbo. 储户基本信息 ( 账号 char (15) NOT NULL ,

姓名 char (8) NULL , 电话 char (16) NULL , 地址 char (30) NULL , 开户行 char (10) NOT NULL , 开户日期 datetime NOT NULL,

PRIMARY KEY(账号 ) );

第 5 章 SQL Server2000 基本操作与应用

创建储户动态信息表 CREATE TABLE dbo. 储户动态信息 ( 账号 char (15) NOT NULL ,

密码 char (6) NULL , 信誉 int NULL ,

[ 存款额 ( 元 )] money NULL , 状态 int NULL , PRIMARY KEY(账号 ) )

第 5 章 SQL Server2000 基本操作与应用

创建储蓄所表 CREATE TABLE [dbo].[ 储蓄所 ] ( [编号 ] [char] (15) NOT NULL ,

[ 名称 ] [char] (30) NOT NULL , [电话 ] [char] (16) NULL , [ 地址 ] [char] (30) NOT NULL ,

PRIMARY KEY(编号 ) )

第 5 章 SQL Server2000 基本操作与应用

创建存取款表 CREATE TABLE [dbo].[ 存取款 ] ( [账号 ] [char] (15) NOT NULL , [编号 ] [char] (15) NOT NULL ,

[ 标志 ] [int] NOT NULL , [金额 ( 元 )] [money] NOT NULL , [ 日期 ] [datetime] NOT NULL,

PRIMARY KEY(账号 ,编号 , 日期 ) )

第 5 章 SQL Server2000 基本操作与应用 创建视图

创建视图“存款” 包括信息:储户基本信息 .账号、储户基本信息 .姓名、

储户动态信息 . 存款额 Transact-SQL 语句为: CREATE VIEW dbo. 存款 AS SELECT dbo. 储户基本信息 .账号 , dbo. 储户基本信息 .姓

名 , dbo. 储户动态信息 .[ 存款额 ( 元 )] FROM dbo. 储户基本信息 INNER JOIN dbo. 储户动态信息 ON dbo. 储户基本信息 .账号 = dbo. 储户动态信息 .账号

第 5 章 SQL Server2000 基本操作与应用 创建视图“储户”

信息来自“储户基本信息”和“储户动态信息”。 Transact-SQL 语句为: CREATE VIEW dbo. 储户 AS SELECT dbo. 储户基本信息 .账号 , dbo. 储户基本信息 .姓名 ,

dbo. 储户基本信息 .电话 , dbo. 储户基本信息 . 地址 , dbo. 储户基本信息 . 开户行 , dbo. 储户基本信息 . 开户日期 , dbo. 储户动态信息 .密码 , dbo. 储户动态信息 . 信誉 , dbo. 储户动态信息 .[ 存款额 ( 元 )], dbo. 储户动态信息 .状态

FROM dbo. 储户基本信息 INNER JOIN dbo. 储户动态信息 ON dbo. 储户基本信息 .账号 = dbo. 储户动态信息 .账号

第 5 章 SQL Server2000 基本操作与应用

创建索引 在表“存取款”上按“存取日期”的索引。以利于按时

间段的业务查询。 Transact-SQL 语句为: CREATE INDEX [ 存取款日期 ] ON [dbo].[ 存取款 ] ([ 日期 ] desc

)