第 5章 数据库对象的操作
返回本章首页上一页 下一页
第 5章 数据库对象的操作
5.1 数据类型
5.2 表操作
5.3 视图操作
5.4 索引操作
5.5 存储过程
5.6 触发器
5.7 图 表
上一章 返回目录
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1 数据类型
5.1.1 系统数据类型
5.1.2 自定义数据类型
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1.1 系统数据类型
1,整型数据类型
2,浮点数据类型
3,字符数据类型
4,日期和时间数据类型
5,文本和图形数据类型
6,货币数据类型
7,位数据类型
8,二进制数据类型
9,特殊数据类型
10,新增数据类型
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,整型数据类型
整型数据类型是最常用的数据类型之一,它主要
用来存储数值,可以直接进行数据运算,而不必使用
函数转换。
int( integer),int(或 integer)数据类型可以存
储从 -231( -2,147,483,648)到 231-1( 2,147,483,
647)范围之间的所有正负整数。
Smallint:可以存储从 -215( -32,768)到 215-1范
围之间的所有正负整数 。
Tinyint:可以存储从 0到 255范围之间的所有正整
数。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,浮点数据类型
浮点数据类型用于存储十进制小数。浮点数值的
数据在 SQL Server中采用只入不舍的方式进行存储 。
Real:可以存储正的或者负的十进制数值,最大
可以有 7位精确位数。
Float:可以精确到第 15位小数,其范围从 -
1.79E-308到 1.79E+308。
Decimal和 numeric,Decimal数据类型和 numeric
数据类型完全相同,它们可以提供小数所需要的实
际存储空间,但也有一定的限制,可以用 2到 17个字
节来存储从 -1038-1到 1038-1之间的数值。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,字符数据类型
字符数据类型可以用来存储各种字母、数字符号
和特殊符号。
Char:其定义形式为 char( n),每个字符和符
号占用一个字节的存储空间。
Varchar:其定义形式为 varchar( n)。用 char数
据类型可以存储长达 255个字符的可变长度字符串 。
Nchar:其定义形式为 nchar( n)。
Nvarchar:其定义形式为 nvarchar( n)。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,日期和时间数据类型
Datetime:用于存储日期和时间的结合体 。它可
以存储从公元 1753年 1月 1日零时起到公元 9999年 12月
31日 23时 59分 59秒之间的所有日期和时间 。
Smalldatetime:与 datetime数据类型类似,但其
日期时间范围较小,它存储从 1900年 1月 1日到 2079年
6月 6日内的日期。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5,文本和图形数据类型
Text:用于存储大量文本数据, 其容量理论上为
1到 231-1( 2,147,483,647) 个字节, 但实际应用
时要根据硬盘的存储空间而定 。
Ntext:与 text数据类型类似, 存储在其中的数据
通常是直接能输出到显示设备上的字符, 显示设备可
以是显示器, 窗口或者打印机 。
Image:用于存储照片, 目录图片或者图画, 其
理论容量为 231-1( 2,147,483,647) 个字节 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
6,货币数据类型
Money:用于存储货币值,存储在 money数据类型
中的数值以一个正数部分和一个小数部分存储在两个 4
字节的整型值中,存储范围为 -922337213685477.5808
到 922337213685477.5808,精度为货币单位的万分之
一。
Smallmoney:与 money数据类型类似,但其存储
的货币值范围比 money数据类型小,其存储范围为 -
214748.3468到 214748.3467。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
7,位数据类型
Bit:称为位数据类型,其数据有两种取值:
0和 1,长度为 1字节。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
8,二进制数据类型
Binary:其定义形式为 binary(n),数据的存储长
度是固定的, 即 n+4字节, 当输入的二进制数据长度
小于 n时, 余下部分填充 0。
Varbinary:其定义形式为 varbinary(n),数据的
存储长度是变化的, 它为实际所输入数据的长度加上
4字节 。 其它含义同 binary。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
9,特殊数据类型
Timestamp:亦称时间戳数据类型, 它提供数据
库范围内的唯一值, 反应数据库中数据修改的相对顺
序, 相当于一个单调上升的计数器 。 Uniqueidentifier:
用于存储一个 16字节长的二进制数据类型, 它是 SQL
Server根据计算机网络适配器地址和 CPU时钟产生的
唯一号码而生成的全局唯一标识符代码 ( Globally
Unique Identifier,简写为 GUID) 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
10,新增数据类型
Bigint:用于存储从 -263( -9,223,372,036,
854,775,807) 到 263-1( 9,223,372,036,854,
775,807) 之间的所有正负整数 。
sql_variant,用于存储除文本, 图形数据和
timestamp类型数据外的其它任何合法的 SQL Server
数据 。
table:用于存储对表或者视图处理后的结果集 。
这种新的数据类型使得变量可以存储一个表, 从而使
函数或过程返回查询结果更加方便, 快捷 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1.2 自定义数据类型
1,使用企业管理器 ( Enterprise Manager) 创建
用户自定义数据类型 。
2,利用系统存储过程创建用户自定义数据类型 。
系统存储过程 sp_addtype为用户提供了 T_SQL语
句创建自定义数据类型的途径, 其语法形式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[,[@nulltype=] ‘null_type’]
[,[@owner=] ‘owner_name’]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-1:自定义一个地址数据类型。
exec sp_addtype address,
‘varchar(80)’,‘not null’
其运行结果如下:
( 1 row(s) affected)
type added.
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-2:删除自定义的生日数据类型。
exec sp_droptype birthday
其运行结果如下:
( 1 row(s) affected)
( 0 row(s) affected)
Type has been dropped.
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2 表操作
5.2.1 创建表
5.2.2 增加, 删除和修改字段
5.2.3 创建, 删除和修改约束
5.2.4 查看表格
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.1 创建表
在 SQL Server 2000中,每个数据库中最多可以创
建 200万个表,用户创建数据库表时,最多可以定义
1024列,也就是可以定义 1024个字段。
SQL Server 2000提供了两种方法创建数据库表,
第一种方法是利用企业管理器( Enterprise Manager)
创建表;另一种方法是利用 Transact-SQL语句中的
create命令创建表。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用 Enterprise Manager创建表
在 Enterprise Manager中,展开指定的服务器和
数据库,打开想要创建新表的数据库,用右键单击表
对象,从弹出的快捷菜单中选择新建表选项,或者在
工具栏中选择图标,就会出现新建表对话框,在该对
话框中,可以定义列的以下属性:列名称、数据类型、
长度、精度、小数位数、是否允许为空、缺省值、标
识列、标识列的初始值、标识列的增量值和是否有行
的标识。 然后根据提示进行设置。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用 create命令创建表
其语法形式如下:
CREATE TABLE
[ database_name.[ owner ],| owner.]
table_name
( { < column_definition >|
column_name AS
computed_column_expression|
< table_constraint >} [,… n])
[ ON { filegroup | DEFAULT } ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建表的各参数的说明如下:
database_name:用于指定在其中创建表的数据库名称。
owner:用于指定新建表的所有者的用户名 。
table_name:用于指定新建的表的名称。
column_name:用于指定新建表的列的名称。
computed_column_expression:用于指定计算列的列值的表
达式。
ON {filegroup | DEFAULT}:用于指定存储表的文件组名。
TEXTIMAGE_ON:用于指定 text,ntext 和 image 列的数
据存储的文件组。
data_type:用于指定列的数据类型 。
DEFAULT:用于指定列的缺省值。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
constant_expression:用于指定列的缺省值的常量表达式 。
IDENTITY:用于指定列为标识列。
Seed:用于指定标识列的初始值。
Increment:用于指定标识列的增量值。
NOT FOR REPLICATION:用于指定列的 IDENTITY属性
在把从其它表中复制的数据插入到表中时不发生作用,即不
足的生成列值,使得复制的数据行保持原来的列值。
ROWGUIDCOL:用于指定列为全球唯一鉴别行号列 。
COLLATE:用于指定表使用的校验方式。
column_constraint和 table_constraint:用于指定列约束和表
约束。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-3:创建了一个雇员信息表
其 SQL语句的程序清单如下:
CREATE TABLE employee
( number int not null,
name varchar(20) NOT NULL,
sex char(2) NULL,
birthday datetime null,
hire_date datetime NOT NULL
DEFAULT (getdate())
professional_title varchar(10) null,
salary money null,
memo ntext null
)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.2 增加、删除和修改字段
利用企业管理器增加、删除和修改字段 。在企
业管理器中,打开指定的服务器中要修改表的数
据库,用右键单击要进行修改的表,从弹出的快
捷菜单中选择设计表选项,则会出现设计表对话
框,在该对话框中,可以利用图形化工具完成增
加、删除和修改字段的操作。
利用 Transact-SQL语言中的 alter table命令增
加、删除和修改字段。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用 Transact-SQL语言中的 alter table命令增加、删除和修
改字段的各参数的说明如下:
table,用于指定要修改的表的名称。
ALTER COLUMN,用于指定要变更或者修改数据类型的列。
column_name,用于指定要更改、添加或删除的列的名称。
new_data_type,用于指定新的数据类型的名称。
precision,用于指定新的数据类型的精度。
scale,用于指定新的数据类型的小数位数。
NULL | NOT NULL,用于指定该列是否可以接受空值。
{ADD | DROP} ROWGUIDCOL, 用于指定在某列上添加或
删除 ROWGUIDCOL 属性。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
ADD,用于指定要添加一个或多个列定义, 计算列
定义或者表约束 。
computed_column_expression,用于指定一个计算列
的计算表达式 。
WITH CHECK | WITH NOCHECK,用于指定已经
存在于表中的数据是否需要使用新添加的或者刚启
用的 FOREIGN KEY 或 CHECK 约束进行验证 。
DROP { [CONSTRAINT] constraint_name |
COLUMN column_name },用于指定从表中删除的
约束或者列的名称 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
{ CHECK | NOCHECK} CONSTRAINT:用于指定启
用或禁用 FOREIGN KEY或者 CHECK约束 。
ALL,用于指定使用 NOCHECK 选项禁用所有的约束,
或者使用 CHECK 选项启用所有约束 。
{ENABLE | DISABLE} TRIGGER:用于指定启用或禁
用触发器 。 当一个触发器被禁用时, 它对表的定义依然
存在;然而, 当在表上执行 INSERT,UPDATE 或
DELETE 语句时, 触发器中的操作将不执行, 除非重新
启用该触发器 。
ALL,用于指定启用或禁用表中所有的触发器 。
trigger_name,指定要启用或禁用的触发器名称 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-4:创建了一个雇员信息表
其 SQL语句的程序清单如下:
create table employees(
id char(8) primary key
name char(20) not null,
department char(20) null,
memo char(30) null
age int null,
)
alter table employees
add salary int null
drop column age
alter column memo varchar(200) null
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.3 创建、删除和修改约束
在 SQL Server 2000中有 5种约束:
主键约束( primary key constraint)
唯一性约束( unique constraint)
检查约束( check constraint)
缺省约束( default constraint)
外部键约束( foreign key constraint)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,主键约束
主键的添加、删除和修改操作方法有两种:
(一)企业管理器操作法,在企业管理器中,用右键
单击要操作的数据库表,从弹出的快捷菜单中选择设
计表选项,然后根据提示操作。
(二) Transact-SQL语句操作法。
其语法形式如下:
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
( column_name[,… n])
第 5章 数据库对象的操作
返回本章首页上一页 下一页
主键约束各参数的说明如下
constraint_name:用于指定约束的名称, 约束的名
称在数据库中应该是唯一的 。 如果不指定, 则系统
会自动生成一个约束名 。
LUSTERED|NONCLUSTERED:用于指定索引的
类型, 即聚簇索引或者非聚簇索引, CLUSTERED
为默认值 。
column_name:用于指定主键的列名 。 主键最多由
16个列组成 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-5
在执行创建产品信息表的操作时,指定产品编号为主键值,并
且创建一个聚簇索引。
create table products(
id char(10) not null,
name char(20) not null
price money default 0.01
quantity smallint null
constraint pk_id primary key clustered
(id)
)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,唯一性约束
唯一性约束用于指定一个或者多个列的组合的值具有
唯一性,以防止在列中输入重复的值。当使用唯一性
约束时,需要考虑以下几个因素:
① 使用唯一性约束的字段允许为空值 。
② 一个表中可以允许有多个唯一性约束 。
③ 可以把唯一性约束定义在多个字段上 。
④ 唯一性约束用于强制在指定字段上创建一个唯一性
索引 。
⑤ 缺省情况下, 创建的索引类型为非聚簇索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建和修改唯一性约束的操作方法
创建和修改唯一性约束的操作方法有两种:
( 一 ) 企业管理器操作法, 通过企业管理器可以完成
创建和修改唯一性约束的操作 。
( 二 ) Transact-SQL语句操作法 。
CONSTRAINT constraint_name
UNIQUE [CLUSTERED|NONCLUSTERED]
( column_name[,… n])
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,检查约束
一个列级检查约束只能与限制的字段有关;一个
表级检查约束只能与限制的表中字段有关。
一个表中可以定义多个检查约束。
每个 CREATE TABLE语句中每个字段只能定义
一个检查约束。
在多个字段上定义检查约束,则必须将检查约束
定义为表级约束。
当执行 INSERT语句或者 UPDATE语句时,检查
约束将验证数据。
检查约束中不能包含子查询。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建检查约束常用的操作方法有两种:
1.企业管理器操作法。使用企业管理器创建检查约束,
与创建唯一性约束类似 。
2.Transact-SQL语句操作法。检查约束的 Transact-
SQL语句操作法,其语法形式如下:
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
(logical_expression)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-7:
创建了一个学生信息表,其中输入性别字段值时,只能接受,F”
或者,M”,并且为 phonenum字段创建检查约束,限制只能输
入类似 01080798654之类的数据,而不能随意输入其他数据。
create table student(
Id char(8)
name char(8)
sex char(2)
phonenum int
constraint chk_sex check( sex in ( ’ F’,’M’))
Constraint chk_phonenum check
( phonenum like ‘(010)[0-9][0-9][0-9][0-9] [0-
9][0-9][0-9][0-9]’)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,缺省约束
使用缺省约束时,应该注意以下几点:
每个字段只能定义一个缺省约束。
如果定义的缺省值长于其对应字段的允许长度,
那么输入到表中的缺省值将被截断。
不能加入到带有 IDENTITY属性或者数据类型为
timestamp的字段上。
如果字段定义为用户定义的数据类型,而且有一
个缺省绑定到这个数据类型上,则不允许该字段
有缺省约束。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5,外部键约束
外部键约束用于强制参照完整性,提供单个字段
或者多个字段的参照完整性。当使用外部键约束时,
应该考虑以下几个因素:
① 外部键约束提供了字段参照完整性 。
② 外部键从句中的字段数目和每个字段指定的数
据类型必须和 REFERENCES从句中的字段相匹配 。
③ 外部键约束不能自动创建索引, 需要用户手动
创建 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
④ 用户想要修改外部键约束的数据, 必须有
对外部键约束所参考表的 SELECT权限或者
REFERENCES权限 。
⑤ 参考同一表中的字段时, 必须只使用
REFERENCES子句, 不能使用外部键子句 。
⑥ 一个表中最多可以有 31个外部键约束 。
⑦ 在临时表中, 不能使用外部键约束 。
⑧ 主键和外部键的数据类型必须严格匹配 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.4 查看表格
查看表格的定义
2,查看表格中的数据
3,查看表格与其它数据库对象的依赖关系
4,利用系统存储过程 Sp_help查看表的信息
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-10:
⑴ 显示当前数据库中所有对象的信息;
⑵显示表 word的信息。在查询分析器( Query
Analyzer)中它们对应的语句和运行结果如图 5-
24(a)和图 5-24(b)所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-24(a) 当前数据库对象显示窗口
图 5-24(b) 表 word显示窗口
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.5 删除表
1,利用企业管理器删除表
在企业管理器中,展开指定的数据库和表格项,
用右键单击要删除的表,从快捷菜单中选择“除去表”
选项,则会出现除去对象对话框。单击“全部删除”
按钮,即可删除表。
2,利用 DROP TABLE语句删除表
DROP TABLE语句可以删除一个表和表中的数
据及其与表有关的所有索引, 触发器, 约束, 许可对
象 。 DROP TABLE语句的语法形式如下:
DROP TABLE table_name
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.1 创建视图
5.3.2 修改和重命名视图
5.3.3 查看视图信息、删除视图
5.3.4 通过视图修改记录
5.3 视图操作
第 5章 数据库对象的操作
返回本章首页上一页 下一页
视图是从一个或者多个表或视图中导出的表,
其结构和数据是建立在对表的查询基础上的。和真实
的表一样,视图也包括几个被定义的数据列和多个数
据行,但从本质上讲,这些数据列和数据行来源于其
所引用的表。因此,视图不是真实存在的基础表而是
一个虚拟表,视图所对应的数据并不实际地以视图结
构存储在数据库中,而是存储在视图所引用的表中。
视图的概念:
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用视图的优点和作用
① 可以使视图集中数据、简化和定制不同用
户对数据库的不同数据要求。
②使用视图可以屏蔽数据的复杂性,用户不
必了解数据库的结构,就可以方便地使用和管理
数据,简化数据权限管理和重新组织数据以便输
出到其他应用程序中。
③视图可以使用户只关心他感兴趣的某些特
定数据和他们所负责的特定任务,而那些不需要
的或者无用的数据则不在视图中显示。
④视图大大地简化了用户对数据的操作。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
⑤ 视图可以让不同的用户以不同的方式看到不
同或者相同的数据集。
⑥在某些情况下,由于表中数据量太大,因此
在表的设计时常将表进行水平或者垂直分割,但
表的结构的变化对应用程序产生不良的影响。
⑦视图提供了一个简单而有效的安全机制。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.1 创建视图
创建视图时应该注意以下情况:
① 只能在当前数据库中创建视图 。
② 如果视图引用的基表或者视图被删除, 则该视图不能再被使用,
直到创建新的基表或者视图 。
③ 如果视图中某一列是函数, 数学表达式, 常量或者来自多个表
的列名相同, 则必须为列定义名称 。
④ 不能在视图上创建索引, 不能在规则, 缺省, 触发器的定义中
引用视图 。
⑤ 当通过视图查询数据时, SQL Server要检查以确保语句中涉及
的所有数据库对象存在, 而且数据修改语句不能违反数据完
整性规则 。
⑥ 视图的名称必须遵循标识符的规则, 且对每个用户必须是唯一
的 。 此外, 该名称不得与该用户拥有的任何表的名称相同 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用企业管理器创建视图
图 5-26,图 5-27(a), 5-27(b),图 5-28,图 5-
29,图 5-30,是利用企业管理器创建视图的具体操作
步骤,用户可根据图中提示创建视图。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-26 选择新建视图选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-27 (a) 新建视图对话框 图 5-27(b) 添加表菜单
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-28 添加表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-29 选择视图字段对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-30 视图属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用 Transact-SQL语句中的 CREATE VIEW
命令创建视图
使用 Transact-SQL语句中的 CREATE VIEW创建视图的语法形
式如下:
CREATE VIEW [ < database_name >,] [ < owner
>,] view_name [ ( column [,...n ] ) ]
[ WITH < view_attribute > [,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
< view_attribute >,:=
{ ENCRYPTION | SCHEMABINDING |
VIEW_METADATA }
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 Transact-SQL语句中的 CREATE VIEW创建视
图的参数说明如下:
view_name用于指定视图的名称, column用于指
定视图中的字段名称 。
WITH ENCRYPTION表示 SQL Server 加密包含
CREATE VIEW 语句文本在内的系统表列 。
select_statement用于创建视图的 SELECT语句, 利
用 SELECT命令可以从表中或者视图中选择列构
成新视图的列 。
WITH CHECK OPTION用于强制视图上执行的
所有数据修改语句都必须符合由 select_statement
设置的准则 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
SCHEMABINDING表示在 select_statement语句
中如果包含表, 视图或者引用用户自定义函数,
则表名, 视图名或者函数名前必须有所有者前缀 。
VIEW_ METADATA表示如果某一查询中引用该
视图且要求返回浏览模式的元数据时, 那么 SQL
Server将向 DBLIB和 OLE DB APIS返回视图的元
数据信息 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-12:
选择表 student和 teacher中的部分字段和记录创建视图,
并且限制表 student中的记录只能是名称为“张三”的记录集
合,视图定义为 view_part,其程序清单如下:
create view view_part
as
Select student.name,
student.age,student.sex,
teacher.name,age,salary
from
student,teacher
where student.name=’张三 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,利用向导创建视图
图 5-31 --图 5-38 是利用向导创建视图 的具体步骤。
图 5-31 选择工具菜单中的向导命令
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-32 欢迎使用创建视图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-33 选择数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-34 选择对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-35 选择字段对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-36 定义限制对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-37 命名视图对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-38 完成创建视图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.2 修改和重命名视图
1,修改视图
( 1)利用企业管理器 修改视图。
( 2)使用 ALTER VIEW语句修改视图 。
ALTER VIEW view_name
[(column[,...n])]
[WITHENCRYPTION]
AS
select_statement
[ WITH CHECK OPTION ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,重命名视图
( 1)利用企业管理器重命名视图 。
( 2)可以使用系统存储过程 sp_rename修改视图的名
称,该过程的语法形式如下:
sp_rename old_name,new_name
例子 5-14:把视图 v_all重命名为 v_part,其程序清单
如下:
sp_rename v_all,v_part
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.3 查看视图信息、删除视图
1,查看视图信息
每当创建了一个新的视图后, 则在系统说明的系
统表中就定义了该视图的存储, 因此, 可以使用系统
存储过程 sp_help显示视图特征, 使用 sp_helptext显
示视图在系统表中的定义, 使用 sp_depends显示该视
图所依赖的对象 。 它们的语法形式分别如下:
( 1) sp_help 数据库对象名称
( 2) sp_helptext 视图(触发器、存储过程)
( 3) sp_depends 数据库对象名称
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 SQL Server 查询分析器和企业管理器来显示
视图
使用 SQL Server 查询分析器 ( Query Analyzer)
可以方便地显示视图信息, 如图 5-42所示, 该对话框
显示了使用 sp_helptext存储过程显示视图 v_employee
的特征 。
另外,也可以使用企业管理器来显示视图的定
义,如图 5-43所示。
利用企业管理器也可以查看视图的输出数据,如
图 5-44所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-42 显示视图信息对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-43 视图属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-44 视图输出数据窗口
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,删除视图
( 1) 使用企业管理器删除视图的操作方法为如
图 5-45和图 5-46所示 。
( 2) 使用 Transact-SQL语句 DROP VIEW删除
视图的语法形式如下:
DROP VIEW {view_name} [,… n]
可以使用该命令同时删除多个视图, 只需在要删
除的视图名称之间用逗号隔开即可 。
例子 5-15:同时删除视图 v_student和 v_teacher,
其程序清单如下:
drop view v_student,v_teacher
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-45 除去对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-46 显示相关性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.4 通过视图修改记录
使用视图修改数据时,需要注意以下几点:
修改视图中的数据时, 不能同时修改两个或者多个基
表, 可以对基于两个或多个基表或者视图的视图进行
修改, 但是每次修改都只能影响一个基表 。
不能修改那些通过计算得到的字段 。
如果在创建视图时指定了 WITH CHECK OPTION选
项, 那么所有使用视图修改数据库信息时, 必须保证
修改后的数据满足视图定义的范围 。
执行 UPDATE,DELETE命令时, 所删除与更新的数
据必须包含在视图的结果集中 。
如果视图引用多个表时, 无法用 DELETE命令删除数
据 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,插入数据记录
例子 5-16:首先创建了一个新的视图 v_employees,该视图基于
表 employees创建 。
create view v_employees(number,name,age,
sex,salary)
as
select number,name,age,sex,salary
from employees
where name=’张三 ’
然后, 通过执行以下语句使用该视图向表 employees中添加一条
新的数据记录 。
Insert into v_employees
Values(001,’李力 ’,22,’m’,2000)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,更新数据记录
使用视图可以更新数据记录, 但应该注意的是, 更新的只
是数据库中的基表 。
例子 5-19, 创 建 了 一 个 基 于 表 employees 的 视 图
v_employees,然后通过该视图修改表 employees中的记录 。 其
程序清单如下:
create view v_employees
as
select * from employees
update v_employees
set name=’张然 ’
where name=’张三 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,删除数据记录
使用视图删除记录, 可以删除任何基表中的记录,
直接利用 DELETE语句删除记录即可 。 但应该注意,
必须指定在视图中定义过的字段来删除记录 。
例子 5-20:利用视图 v_employees删除表 employees
中姓名为张然的记录 。 其程序清单为:
delete from v_employees
where name=’张然 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4 索引操作
5.4.1 创建索引
5.4.2 查看, 修改和删除索引
第 5章 数据库对象的操作
返回本章首页上一页 下一页
一、什么叫索引
数据库中的索引与书籍中的索引类似,在一本书
中,利用索引可以快速查找所需信息,无须阅读整本
书。在数据库中,索引使数据库程序无须对整个表进
行扫描,就可以在其中找到所需数据。书中的索引是
一个词语列表,其中注明了包含各个词的页码。而数
据库中的索引是某个表中一列或者若干列值的集合和
相应的指向表中物理标识这些值的数据页的逻辑指针
清单。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
二、索引的作用
通过创建唯一索引, 可以保证数据记录的唯一性 。
可以大大加快数据检索速度 。
可以加速表与表之间的连接, 这一点在实现数据
的参照完整性方面有特别的意义 。
在使用 ORDER BY和 GROUP BY子句中进行检索
数据时, 可以显著减少查询中分组和排序的时间 。
使用索引可以在检索数据的过程中使用优化隐藏
器, 提高系统性能 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
聚集索引与非聚集索引
聚集索引对表的物理数据页中的数据按列进行排
序,然后再重新存储到磁盘上,即聚集索引与数据是
混为一体的,它的叶节点中存储的是实际的数据。
非聚集索引具有完全独立于数据行的结构,使用
非聚集索引不用将物理数据页中的数据按列排序。非
聚集索引的叶节点存储了组成非聚集索引的关键字值
和行定位器。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4.1 创建索引
SQL Server 2000创建索引的方法
( 1)利用企业管理器中的索引向导创建索引。
( 2)利用企业管理器直接创建索引。
( 3)利用 Transact-SQL语句中的 CREATE
INDEX命令创建索引。
( 4)利用企业管理器中的索引优化向导创建索引。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用索引向导创建索引
如图 5-47 --图 5-52 所示。
图 5-47 欢迎使用创建索引向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-48 选择数据库和对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-49 显示当前索引信息对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-50 选择创建索引的列对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-51 指定索引选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-52 指定索引名称对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用企业管理器直接创建索引
其具体步骤如下:
(1)在企业管理器中,展开指定的服务器和
数据库,选择要创建索引的表,用右键单击该表,
从弹出的快捷菜单中选择所有任务项的管理索引选
项(如图 5-53所示),就会出现管理索引对话框,
如图 5-54所示。在该对话框中,可以选择要处理的
数据库和表 。
(2)单击“新建”按钮,则出现新建索引对
话框,如图 5-55所示。
(3)选择完成后单击“确定”按钮,即可生
成新的索引;单击“取消”按钮,则取消新建索引
的操作。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-53 选择管理索引选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-54 管理索引对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-55 新建索引对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,利用 Transact-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 ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
CREATE INDEX命令创建索引各参数说明如下:
UNIQUE:用于指定为表或视图创建唯一索引,即不允许存
在索引值相同的两行。
CLUSTERED:用于指定创建的索引为聚集索引。
NONCLUSTERED:用于指定创建的索引为非聚集索引。
index_name,用于指定所创建的索引的名称。
table,用于指定创建索引的表的名称。
view,用于指定创建索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
Column,用于指定被索引的列。
PAD_INDEX:用于指定索引中间级中每个页(节点)上保持
开放的空间。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
FILLFACTOR = fillfactor:用于指定在创建索引时,每个索
引页的数据占索引页大小的百分比,fillfactor的值为 1到 100。
IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集索
引中的列中插入重复数据时 SQL Server所作的反应。
DROP_EXISTING:用于指定应删除并重新创建已命名的先
前存在的聚集索引或者非聚集索引。
STATISTICS_NORECOMPUTE:用于指定过期的索引统计
不会自动重新计算。
SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果
将存储在 tempdb 数据库中。
ON filegroup:用于指定存放索引的文件组。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-21:
例子 5-21:为表 employees创建了一个唯一聚集索引, 其程序
清单如下:
CREATE UNIQUE CLUSTERED INDEX number_ind
ON employees (number)
with
pad_index,
fillfactor=20,
ignore_dup_key,
drop_existing,
statistics_norecompute
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-22:
为表 employees创建了一个复合索引, 其程序清单如
下:
create index employees_cpl_ind
on employees(name,age)
with
pad_index,
fillfactor=50
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,利用索引优化向导创建索引
索引优化向导可以完成以下几方面的工作:
( 1) 根据给定的工作负荷, 通过使用查询优化器
分析该工作负荷中的查询, 为数据库推荐最佳索引组合 。
( 2) 分析所建议的更改将会产生的影响, 包括索引
的使用, 查询在表之间的分布, 以及查询在工作负荷中
的性能 。
( 3) 推荐为执行一个小型的问题查询集而对数据库
进行优化的方法 。
( 4) 通过设定高级选项如磁盘空间约束, 最大查询
语句数和每个索引最多对应字段数等, 允许定制推荐方
式 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用索引优化向导创建和优化索引的具体步骤如下:
如图 5-56 --图 5-65 所示。
图 5-56 欢迎使用索引优化向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-57 选择服务器和数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-58 连接服务器对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-59 选择服务器对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-61 修改缺省优化参数对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-62 选择要优化的表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-63 索引建议对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-64 索引分析对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-65 完成索引优化向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4.2 查看、修改和删除索引
1,利用企业管理器查看, 修改和删除索引
要查看和修改索引的详细信息, 可以在企业管理器中,
展开指定的服务器和数据库项, 用右键单击要查看的表, 从弹
出的快捷菜单中选择所有任务子菜单中的, 管理索引, 选项,
则会出现管理索引对话框 。 选择要查看或者修改的索引, 单击
,编辑, 按钮, 就会出现修改索引对话框 。 在该对话框中, 可
以修改索引的大部分设置, 还可以直接修改其 SQL脚本, 只需
按下, 编辑 SQL…,按钮, 即可出现编辑 SQL脚本对话框, 其
中可以编辑, 测试和运行索引的 SQL脚本 。
要删除索引, 可以在企业管理器中, 从管理索引对话框
中或者表的属性对话框中, 选择要删除的索引, 单击, 删除,
按钮, 即可删除索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,用系统存储过程查看和更改索引名称
系统存储过程 sp_helpindex可以返回表的所有索
引信息, 其语法形式如下:
sp_helpindex [@objname=]’name’
其中 [@objname=]’name’参数用于指定当前数据
库中的表的名称。
另外, 系统存储过程 sp_rename可以用来更改索
引的名称, 其语法形式如下:
sp_rename[@objname=]'object_name',
[@newname=]'new_name'
[,[ @objtype = ] 'object_type' ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-23:
更改 employees表中的索引 employees_name_index名
称为 employees_name_ind,其程序清单如下:
Exec sp_rename
‘employees.[employees_name_index]’,
‘employees_name_ind’,‘index’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 Transact-SQL语句中的 DROP INDEX命令删
除索引
当不再需要某个索引时, 可以将其删除, DROP
INDEX命令可以删除一个或者多个当前数据库中的索
引, 其语法形式如下:
DROP INDEX 'table.index | view.index' [,...n ]
其中, table | view用于指定索引列所在的表或索
引视图; index用于指定要删除的索引名称 。 注意,
DROP INDEX命令不能删除由 CREATE TABLE或者
ALTER TABLE命令创建的主键或者唯一性约束索引,
也不能删除系统表中的索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5 存储过程
5.5.1 创建存储过程
5.5.2 执行存储过程
5.5.3 查看和修改存储过程
5.5.4 重命名和删除存储过程
第 5章 数据库对象的操作
返回本章首页上一页 下一页
存储过程的概念
SQL Server提供了一种方法,它可以将一些固定
的操作集中起来由 SQL Server数据库服务器来完成,
以实现某个任务,这种方法就是存储过程。
在 SQL Server中存储过程分为两类:即系统提供
的存储过程和用户自定义的存储过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.1 创建存储过程
在 SQL Server中,可以使用三种方法创建存储过
程,
①使用创建存储过程向导创建存储过程。
②利用 SQL Server 企业管理器创建存储过程。
③使用 Transact-SQL语句中的 CREATE
PROCEDURE命令创建存储过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建存储过程时,需要确定存储过程的三个组
成部分:
① 所有的输入参数以及传给调用者的输出参数 。
② 被执行的针对数据库的操作语句, 包括调用
其它存储过程的语句 。
③ 返回给调用者的状态值, 以指明调用是成功
还是失败 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,使用创建存储过程向导创建存储过程
在企业管理器中,
选择工具菜单中的向
导选项, 选择, 创建
存储过程向导, ( 如
图 3-1所示 ), 则出
现欢迎使用创建存储
过程向导对话框, 如
图 5-71所示 。 根据图
5-71-- 图 5-76提示 可
完成创建存储过程 。 图 3-1 新建 SQL Server组
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-71 欢迎使用创建存储过程向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-72 选择数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-73 选择数据库对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-74 完成创建存储过程向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-75 编辑存储过程属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-76 编辑存储过程 SQL对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,使用 SQL Server 企业管理器创建存储过程
( 1 ) 在 SQL Server企业管理器中, 选择指定的
服务器和数据库, 用右键单击要创建存储过程的数
据库, 在弹出的快捷菜单中选择, 新建, 选项, 再
选择下一级菜单中的, 存储过程 …,选项, 如图 5-77
所示;或者用右键单击存储过程图标, 从弹出的快
捷菜单中选择, 新建存储过程 …,选项, 如图 5-78所
示 。 均会出现创建存储过程对话框, 如图 5-79所示 。
(2)在文本框中可以输入创建存储过程的
T_SQL语句,单击“检查语法”,则可以检查语法
是否正确;单击“确定”按钮,即可保存该存储过
程。如果要设置权限,单击“权限 …” 按钮,如图 5-
80所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-77 选择新建存储过程对话框( 1)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-78 选择新建存储过程对话框( 2)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-79 新建存储过程对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-80 设置权限对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 Transact-SQL语句中的 CREATE
PROCEDURE命令创建存储过程
创建存储过程前, 应该考虑下列几个事项:
① 不能将 CREATE PROCEDURE 语句与其它 SQL
语句组合到单个批处理中 。
② 创建存储过程的权限默认属于数据库所有者, 该所
有者可将此权限授予其他用户 。
③ 存储过程是数据库对象, 其名称必须遵守标识符规
则 。
④ 只能在当前数据库中创建存储过程 。
⑤ 一个存储过程的最大尺寸为 128M。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 CREATE PROCEDURE创建存储过程的语法形
式如下:
CREATEPROC[EDURE]procedure_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]
][,...n]
WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRY
PTION}]
[FORREPLICATION]
AS sql_statement [,..n ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
用 CREATE PROCEDURE创建存储过程的语法 参数
的意义如下:
procedure_name:用于指定要创建的存储过程的名称。
number:该参数是可选的整数,它用来对同名的存储过程
分组,以便用一条 DROP PROCEDURE 语句即可将同组的
过程一起除去。
@parameter:过程中的参数。在 CREATE PROCEDURE
语句中可以声明一个或多个参数。
data_type:用于指定参数的数据类型。
VARYING:用于指定作为输出 OUTPUT参数支持的结果集。
Default:用于指定参数的默认值。
OUTPUT:表明该参数是一个返回参数。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
RECOMPILE:表明 SQL Server 不会保存该存储
过程的执行计划 。
ENCRYPTION,表示 SQL Server 加密了
syscomments 表,该表的 text字段是包含 CREATE
PROCEDURE 语句的存储过程文本。
FOR REPLICATION:用于指定不能在订阅服务
器上执行为复制创建的存储过程。
AS:用于指定该存储过程要执行的操作。
sql_statement:是存储过程中要包含的任意数目和
类型的 Transact-SQL 语句。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.2 执行存储过程
直接执行存储过程可以使用 EXECUTE命令来执行,
其语法形式如下:
[[EXEC[UTE]]
{
[@return_status=]
{procedure_name[;number]|@procedu
re_name_var}
[[@parameter=]{value|@variable[OUTPU
T]|[DEFAULT]}
[,...n]
[ WITH RECOMPILE ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-27:
使用 EXECUTE 命令传递单个参数, 它执行 showind 存储过程,
以 titles 为参数值 。 showind 存储过程需要参数 (@tabname),
它是一个表的名称 。 其程序清单如下:
EXEC showind titles
当然, 在执行过程中变量可以显式命名:
EXEC showind @tabname = titles
如果这是 isql 脚本或批处理中第一个语句, 则 EXEC 语句可以
省略:
showind titles或者 showind @tabname = titles
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.3 查看和修改存储过程
查看存储过程
存储过程被创建之后, 它的名字就存储在系统表
sysobjects中, 它的源代码存放在系统表 syscomments
中 。 可以使用使用企业管理器或系统存储过程来查看
用户创建的存储过程 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
( 1)使用企业管理器查看用户创建的存储过程
在企业管理器中,打开指定的服务器和数据库
项,选择要创建存储过程的数据库,单击存储过程文
件夹,此时在右边的页框中显示该数据库的所有存储
过程。用右键单击要查看的存储过程,从弹出的快捷
菜单中选择属性选项,此时便可以看到存储过程的源
代码。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
( 2)使用系统存储过程来查看用户创建的存储过程
可供使用的系统存储过程及其语法形式如下:
sp_help:用于显示存储过程的参数及其数据类型
sp_help [[@objname=] name]
参数 name为要查看的存储过程的名称 。
sp_helptext:用于显示存储过程的源代码
sp_helptext [[@objname=] name]
参数 name为要查看的存储过程的名称 。
sp_depends:用于显示和存储过程相关的数据库对象
sp_depends [@objname=]’object’
参数 object为要查看依赖关系的存储过程的名称 。
sp_stored_procedures:用于返回当前数据库中的存储过程
列表
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,修改存储过程
存储过程可以根据用户的要求或者基表定义的改变而改
变 。 使用 ALTER PROCEDURE语句可以更改先前通过执行
CREATE PROCEDURE 语句创建的过程, 但不会更改权限,
也不影响相关的存储过程或触发器 。 其语法形式如下:
ALTERPROC[EDURE]procedure_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]][,...n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
AS
sql_statement [,..n ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-29:
创建了一个名为 Oakland_authors 的过程, 默认
情况下, 该过程包含所有来自加利福尼亚州奥克兰市
的作者 。 随后授予了权限 。 然后, 当该过程需更改为
能够检索所有来自加利福尼亚州的作者时, 用
ALTER PROCEDURE 重新定义了该存储过程 。 其程
序清单如下:
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.4 重命名和删除存储过程
1,重命名存储过程
修改存储过程的名称可以使用系统存储过程
sp_rename,其语法形式如下:
sp_rename 原存储过程名称, 新存储过程名称
另外,通过企业管理器也可以修改存储过程的名
称。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,删除存储过程
删除存储过程可以使用 DROP命令, DROP命令
可以将一个或者多个存储过程或者存储过程组从当前
数据库中删除, 其语法形式如下:
drop procedure {procedure} [,… n]
当然,利用企业管理器也可以很方便地删除存储
过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6 触发器
5.6.1 创建触发器
5.6.2 查看、修改和删除触发器
5.6.3 触发器的应用
第 5章 数据库对象的操作
返回本章首页上一页 下一页
触发器
触发器是一种特殊类型的存储过程, 它不同于前
面介绍过的存储过程 。 触发器主要是通过事件进行触
发而被执行的, 而存储过程可以通过存储过程名称而
被直接调用 。 触发器是一个功能强大的工具, 它使每
个站点可以在有数据修改时自动强制执行其业务规则 。
触发器可以用于 SQL Server 约束, 默认值和规则的
完整性检查 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
触发器主要优点如下:
触发器是自动的:当对表中的数据作了任何修改
(比如手工输入或者应用程序采取的操作)之后立即
被激活。
触发器可以通过数据库中的相关表进行层叠更改。
触发器可以强制限制,这些限制比用 CHECK 约
束所定义的更复杂。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.1 创建触发器
创建触发器应该考虑以下几个问题:
① CREATE TRIGGER 语句必须是批处理中的第一个语句。
②创建触发器的权限默认分配给表的所有者,且不能将该权限
转给其他用户。
③触发器为数据库对象,其名称必须遵循标识符的命名规则。
④虽然触发器可以引用当前数据库以外的对象,但只能在当前
数据库中创建触发器。
⑤虽然不能在临时表或系统表上创建触发器,但是触发器可以
引用临时表。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
⑥ 在含有用 DELETE 或 UPDATE 操作定义的外键的表中, 不
能定义 INSTEAD OF 和 INSTEAD OF UPDATE 触发器 。
⑦ 虽然 TRUNCATE TABLE 语句类似于没有 WHERE 子句
( 用于删除行 ) 的 DELETE 语句, 但它并不会引发
DELETE 触发器, 因为 TRUNCATE TABLE 语句没有记录 。
⑧ WRITETEXT 语句不会引发 INSERT 或 UPDATE 触发器 。
⑨ 当创建一个触发器时必须指定,⑴ 名称; ⑵ 在其上定义触发
器的表; ⑶ 触发器将何时激发; ⑷ 激活触发器的数据修改语
句 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,使用企业管理器创建触发器
在企业管理器中, 展开指定的服务器和数据库项,
然后展开要在其上创建触发器的表所在的数据库, 用
右键单击该表, 从弹出的快捷菜单中选择所有任务子
菜单下的管理触发器选项, 则会出现触发器属性对话
框 。 在该对话框中, 在名称文本框中选择新建, 然后
在文本框中输入触发器文本 。 单击, 检查语法, 按钮,
则可以检查语法是否正确 。 单击, 应用, 按钮, 则在
名称下拉列表中会有新创建的触发器名称 。 最后, 单
击, 确定, 按钮, 即可关闭该对话框, 成功创建触发
器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,使用 CREATE TRIGGER命令创建触发器
其语法形式如下:
CREATE TRIGGER trigger_name
ON{table|view}
[WITHENCRYPTION]
{
{ { FOR | AFTER | INSTEAD OF }
{ [DELETE][,][ INSERT ] [,] [ UPDATE ] }
[WITHAPPEND]
[NOTFORREPLICATION]
AS
第 5章 数据库对象的操作
返回本章首页上一页 下一页
[{IFUPDATE(column)
[{AND|OR}UPDATE(column)]
[...n]
|IF(COLUMNS_UPDATED(){bitwise_opera
tor}updated_bitmask)
{comparison_operator}column_bitm
ask[...n]
}]
sql_statement[...n]
}
}
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-30:
创建了一个触发器, 在 titles 表上创建一个插入, 更新类
型的触发器, 其程序清单如下:
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type =
'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT,UPDATE
AS sql_statements
GO
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.2 查看、修改和删除触发器
1,查看触发器
( 1 ) 使用企业管理器查看触发器信息
( 2 ) 使用系统存储过程查看触发器
第 5章 数据库对象的操作
返回本章首页上一页 下一页
sp_help,sp_helptext和 sp_depends具体用途和语法形
式如下。
sp_help:用于查看触发器的一般信息, 如触发器的
名称, 属性, 类型和创建时间 。
sp_help ‘触发器名称 ’
sp_helptext:用于查看触发器的正文信息
sp_helptext ‘触发器名称 ’
sp_depends:用于查看指定触发器所引用的表或者指
定的表涉及到的所有触发器 。
sp_depends ’触发器名称 ’
sp_depends ‘表名 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,修改触发器
( 1 ) 使用企业管理器修改触发器正文
在企业管理器中,展开指定的服务器和数据库,
选择指定的数据库和表,用右键单击要修改的表,从
弹出的快捷菜单中选择所有任务子菜单下的管理触发
器选项,则会出现触发器属性对话框。在名称选项框
中选择要修改的触发器的名称,然后在文本框中修改
触发器的 SQL语句,单击“检查语法”按钮,可以检
查语法是否正确。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
(2)使用 sp_rename命令修改触发器的名称
sp_rename命令的语法形式如下:
sp_rename oldname,newname
第 5章 数据库对象的操作
返回本章首页上一页 下一页
(3)使用 alter trigger命令修改触发器正文
alter trigger命令的语法形式如下:
ALTERTRIGGERtrigger_name
ON(table|view)
[WITHENCRYPTION]
{
{ ( FOR | AFTER | INSTEAD OF ) { [ DELETE ]
[,] [ INSERT ] [,] [ UPDATE ] }
[NOTFORREPLICATION]
AS
sql_statement[...n]}
|
第 5章 数据库对象的操作
返回本章首页上一页 下一页
{(FOR|AFTER|INSTEADOF){[INSERT][,]UPDATE}}
[NOTFORREPLICATION]
AS
{IFUPDATE(column)
[{AND|OR}UPDATE(column)]
[...n]
| IF ( COLUMNS_UPDATED ( )
{ bitwise_operator } updated_bitmask )
{comparison_operator}column_bitmask[...n]
}
sql_statement[...n]
}
}
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,删除触发器
( 1 ) 使用系统命令 DROP TRIGGER删除指定
的触发器, 其语法形式如下:
DROP TRIGGER { trigger } [,...n ]
( 2 ) 删除触发器所在的表时, SQL Server将会
自动删除与该表相关的触发器 。
( 3 ) 在企业管理器中, 用右键单击要删除的触
发器所在的表, 从弹出的快捷菜单中选择所有任务子
菜单下的管理触发器选项, 则会出现触发器属性对话
框 。 在名称选项框中选择要删除的触发器, 单击, 删
除, 按钮, 即可删除该触发器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.3 触发器的应用
1,使用 INSERT触发器
INSERT触发器通常被用来更新时间标记字段,
或者验证被触发器监控的字段中的数据满足要求的
标准,以确保数据完整性。
例子 5-31:
2,使用 UPDATE触发器
修改触发器和插入触发器的工作过程基本上一致,
修改一条记录等于插入了一条新的记录并且删除一
条旧的记录。
例子 5-32和 5-33
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 DELETE触发器
DELETE触发器通常用于两种情况, 第一种情况
是为了防止那些确实需要删除但会引起数据一致性问
题的记录的删除 。
第二种情况是执行可删除主记录的子记录的级联
删除操作 。 可以使用这样的触发器从主销售记录中删
除所有的定单项 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,使用嵌套的触发器
如果一个触发器在执行操作时引发了另一个触发
器, 而这个触发器又接着引发下一个触发器 …… 这些
触发器就是嵌套触发器 。 触发器可嵌套至 32 层, 并
且可以控制是否可以通过 "嵌套触发器 "服务器配置选
项进行触发器嵌套 。 如果允许使用嵌套触发器, 且链
中的一个触发器开始一个无限循环, 则超出嵌套级,
而且触发器将终止 。 在执行过程中, 如果一个触发器
修改某个表, 而这个表已经有其它触发器, 这是就要
使用嵌套触发器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.7 图 表
图表(又称关系图)是 SQL Server中一类特殊
的数据库对象,它提供给用户直观地管理数据库表的
方法。通过图表,用户可以直观地创建、编辑数据库
表之间的关系,也可以编辑表及其列的属性。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用企业管理器创建图表的具体步骤如下:
图 5-85--图 5-87所示 。
图 5-85 欢迎使用创建数据库关系图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-86 选择要添加的表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-87 完成数据库关系图创建对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
Thank you very much!
谢
谢
您
的
光
临
,
再
见
!
下一章
返回本章首页上一页 下一页
第 5章 数据库对象的操作
5.1 数据类型
5.2 表操作
5.3 视图操作
5.4 索引操作
5.5 存储过程
5.6 触发器
5.7 图 表
上一章 返回目录
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1 数据类型
5.1.1 系统数据类型
5.1.2 自定义数据类型
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1.1 系统数据类型
1,整型数据类型
2,浮点数据类型
3,字符数据类型
4,日期和时间数据类型
5,文本和图形数据类型
6,货币数据类型
7,位数据类型
8,二进制数据类型
9,特殊数据类型
10,新增数据类型
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,整型数据类型
整型数据类型是最常用的数据类型之一,它主要
用来存储数值,可以直接进行数据运算,而不必使用
函数转换。
int( integer),int(或 integer)数据类型可以存
储从 -231( -2,147,483,648)到 231-1( 2,147,483,
647)范围之间的所有正负整数。
Smallint:可以存储从 -215( -32,768)到 215-1范
围之间的所有正负整数 。
Tinyint:可以存储从 0到 255范围之间的所有正整
数。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,浮点数据类型
浮点数据类型用于存储十进制小数。浮点数值的
数据在 SQL Server中采用只入不舍的方式进行存储 。
Real:可以存储正的或者负的十进制数值,最大
可以有 7位精确位数。
Float:可以精确到第 15位小数,其范围从 -
1.79E-308到 1.79E+308。
Decimal和 numeric,Decimal数据类型和 numeric
数据类型完全相同,它们可以提供小数所需要的实
际存储空间,但也有一定的限制,可以用 2到 17个字
节来存储从 -1038-1到 1038-1之间的数值。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,字符数据类型
字符数据类型可以用来存储各种字母、数字符号
和特殊符号。
Char:其定义形式为 char( n),每个字符和符
号占用一个字节的存储空间。
Varchar:其定义形式为 varchar( n)。用 char数
据类型可以存储长达 255个字符的可变长度字符串 。
Nchar:其定义形式为 nchar( n)。
Nvarchar:其定义形式为 nvarchar( n)。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,日期和时间数据类型
Datetime:用于存储日期和时间的结合体 。它可
以存储从公元 1753年 1月 1日零时起到公元 9999年 12月
31日 23时 59分 59秒之间的所有日期和时间 。
Smalldatetime:与 datetime数据类型类似,但其
日期时间范围较小,它存储从 1900年 1月 1日到 2079年
6月 6日内的日期。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5,文本和图形数据类型
Text:用于存储大量文本数据, 其容量理论上为
1到 231-1( 2,147,483,647) 个字节, 但实际应用
时要根据硬盘的存储空间而定 。
Ntext:与 text数据类型类似, 存储在其中的数据
通常是直接能输出到显示设备上的字符, 显示设备可
以是显示器, 窗口或者打印机 。
Image:用于存储照片, 目录图片或者图画, 其
理论容量为 231-1( 2,147,483,647) 个字节 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
6,货币数据类型
Money:用于存储货币值,存储在 money数据类型
中的数值以一个正数部分和一个小数部分存储在两个 4
字节的整型值中,存储范围为 -922337213685477.5808
到 922337213685477.5808,精度为货币单位的万分之
一。
Smallmoney:与 money数据类型类似,但其存储
的货币值范围比 money数据类型小,其存储范围为 -
214748.3468到 214748.3467。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
7,位数据类型
Bit:称为位数据类型,其数据有两种取值:
0和 1,长度为 1字节。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
8,二进制数据类型
Binary:其定义形式为 binary(n),数据的存储长
度是固定的, 即 n+4字节, 当输入的二进制数据长度
小于 n时, 余下部分填充 0。
Varbinary:其定义形式为 varbinary(n),数据的
存储长度是变化的, 它为实际所输入数据的长度加上
4字节 。 其它含义同 binary。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
9,特殊数据类型
Timestamp:亦称时间戳数据类型, 它提供数据
库范围内的唯一值, 反应数据库中数据修改的相对顺
序, 相当于一个单调上升的计数器 。 Uniqueidentifier:
用于存储一个 16字节长的二进制数据类型, 它是 SQL
Server根据计算机网络适配器地址和 CPU时钟产生的
唯一号码而生成的全局唯一标识符代码 ( Globally
Unique Identifier,简写为 GUID) 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
10,新增数据类型
Bigint:用于存储从 -263( -9,223,372,036,
854,775,807) 到 263-1( 9,223,372,036,854,
775,807) 之间的所有正负整数 。
sql_variant,用于存储除文本, 图形数据和
timestamp类型数据外的其它任何合法的 SQL Server
数据 。
table:用于存储对表或者视图处理后的结果集 。
这种新的数据类型使得变量可以存储一个表, 从而使
函数或过程返回查询结果更加方便, 快捷 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.1.2 自定义数据类型
1,使用企业管理器 ( Enterprise Manager) 创建
用户自定义数据类型 。
2,利用系统存储过程创建用户自定义数据类型 。
系统存储过程 sp_addtype为用户提供了 T_SQL语
句创建自定义数据类型的途径, 其语法形式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[,[@nulltype=] ‘null_type’]
[,[@owner=] ‘owner_name’]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-1:自定义一个地址数据类型。
exec sp_addtype address,
‘varchar(80)’,‘not null’
其运行结果如下:
( 1 row(s) affected)
type added.
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-2:删除自定义的生日数据类型。
exec sp_droptype birthday
其运行结果如下:
( 1 row(s) affected)
( 0 row(s) affected)
Type has been dropped.
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2 表操作
5.2.1 创建表
5.2.2 增加, 删除和修改字段
5.2.3 创建, 删除和修改约束
5.2.4 查看表格
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.1 创建表
在 SQL Server 2000中,每个数据库中最多可以创
建 200万个表,用户创建数据库表时,最多可以定义
1024列,也就是可以定义 1024个字段。
SQL Server 2000提供了两种方法创建数据库表,
第一种方法是利用企业管理器( Enterprise Manager)
创建表;另一种方法是利用 Transact-SQL语句中的
create命令创建表。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用 Enterprise Manager创建表
在 Enterprise Manager中,展开指定的服务器和
数据库,打开想要创建新表的数据库,用右键单击表
对象,从弹出的快捷菜单中选择新建表选项,或者在
工具栏中选择图标,就会出现新建表对话框,在该对
话框中,可以定义列的以下属性:列名称、数据类型、
长度、精度、小数位数、是否允许为空、缺省值、标
识列、标识列的初始值、标识列的增量值和是否有行
的标识。 然后根据提示进行设置。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用 create命令创建表
其语法形式如下:
CREATE TABLE
[ database_name.[ owner ],| owner.]
table_name
( { < column_definition >|
column_name AS
computed_column_expression|
< table_constraint >} [,… n])
[ ON { filegroup | DEFAULT } ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建表的各参数的说明如下:
database_name:用于指定在其中创建表的数据库名称。
owner:用于指定新建表的所有者的用户名 。
table_name:用于指定新建的表的名称。
column_name:用于指定新建表的列的名称。
computed_column_expression:用于指定计算列的列值的表
达式。
ON {filegroup | DEFAULT}:用于指定存储表的文件组名。
TEXTIMAGE_ON:用于指定 text,ntext 和 image 列的数
据存储的文件组。
data_type:用于指定列的数据类型 。
DEFAULT:用于指定列的缺省值。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
constant_expression:用于指定列的缺省值的常量表达式 。
IDENTITY:用于指定列为标识列。
Seed:用于指定标识列的初始值。
Increment:用于指定标识列的增量值。
NOT FOR REPLICATION:用于指定列的 IDENTITY属性
在把从其它表中复制的数据插入到表中时不发生作用,即不
足的生成列值,使得复制的数据行保持原来的列值。
ROWGUIDCOL:用于指定列为全球唯一鉴别行号列 。
COLLATE:用于指定表使用的校验方式。
column_constraint和 table_constraint:用于指定列约束和表
约束。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-3:创建了一个雇员信息表
其 SQL语句的程序清单如下:
CREATE TABLE employee
( number int not null,
name varchar(20) NOT NULL,
sex char(2) NULL,
birthday datetime null,
hire_date datetime NOT NULL
DEFAULT (getdate())
professional_title varchar(10) null,
salary money null,
memo ntext null
)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.2 增加、删除和修改字段
利用企业管理器增加、删除和修改字段 。在企
业管理器中,打开指定的服务器中要修改表的数
据库,用右键单击要进行修改的表,从弹出的快
捷菜单中选择设计表选项,则会出现设计表对话
框,在该对话框中,可以利用图形化工具完成增
加、删除和修改字段的操作。
利用 Transact-SQL语言中的 alter table命令增
加、删除和修改字段。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用 Transact-SQL语言中的 alter table命令增加、删除和修
改字段的各参数的说明如下:
table,用于指定要修改的表的名称。
ALTER COLUMN,用于指定要变更或者修改数据类型的列。
column_name,用于指定要更改、添加或删除的列的名称。
new_data_type,用于指定新的数据类型的名称。
precision,用于指定新的数据类型的精度。
scale,用于指定新的数据类型的小数位数。
NULL | NOT NULL,用于指定该列是否可以接受空值。
{ADD | DROP} ROWGUIDCOL, 用于指定在某列上添加或
删除 ROWGUIDCOL 属性。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
ADD,用于指定要添加一个或多个列定义, 计算列
定义或者表约束 。
computed_column_expression,用于指定一个计算列
的计算表达式 。
WITH CHECK | WITH NOCHECK,用于指定已经
存在于表中的数据是否需要使用新添加的或者刚启
用的 FOREIGN KEY 或 CHECK 约束进行验证 。
DROP { [CONSTRAINT] constraint_name |
COLUMN column_name },用于指定从表中删除的
约束或者列的名称 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
{ CHECK | NOCHECK} CONSTRAINT:用于指定启
用或禁用 FOREIGN KEY或者 CHECK约束 。
ALL,用于指定使用 NOCHECK 选项禁用所有的约束,
或者使用 CHECK 选项启用所有约束 。
{ENABLE | DISABLE} TRIGGER:用于指定启用或禁
用触发器 。 当一个触发器被禁用时, 它对表的定义依然
存在;然而, 当在表上执行 INSERT,UPDATE 或
DELETE 语句时, 触发器中的操作将不执行, 除非重新
启用该触发器 。
ALL,用于指定启用或禁用表中所有的触发器 。
trigger_name,指定要启用或禁用的触发器名称 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-4:创建了一个雇员信息表
其 SQL语句的程序清单如下:
create table employees(
id char(8) primary key
name char(20) not null,
department char(20) null,
memo char(30) null
age int null,
)
alter table employees
add salary int null
drop column age
alter column memo varchar(200) null
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.3 创建、删除和修改约束
在 SQL Server 2000中有 5种约束:
主键约束( primary key constraint)
唯一性约束( unique constraint)
检查约束( check constraint)
缺省约束( default constraint)
外部键约束( foreign key constraint)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,主键约束
主键的添加、删除和修改操作方法有两种:
(一)企业管理器操作法,在企业管理器中,用右键
单击要操作的数据库表,从弹出的快捷菜单中选择设
计表选项,然后根据提示操作。
(二) Transact-SQL语句操作法。
其语法形式如下:
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
( column_name[,… n])
第 5章 数据库对象的操作
返回本章首页上一页 下一页
主键约束各参数的说明如下
constraint_name:用于指定约束的名称, 约束的名
称在数据库中应该是唯一的 。 如果不指定, 则系统
会自动生成一个约束名 。
LUSTERED|NONCLUSTERED:用于指定索引的
类型, 即聚簇索引或者非聚簇索引, CLUSTERED
为默认值 。
column_name:用于指定主键的列名 。 主键最多由
16个列组成 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-5
在执行创建产品信息表的操作时,指定产品编号为主键值,并
且创建一个聚簇索引。
create table products(
id char(10) not null,
name char(20) not null
price money default 0.01
quantity smallint null
constraint pk_id primary key clustered
(id)
)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,唯一性约束
唯一性约束用于指定一个或者多个列的组合的值具有
唯一性,以防止在列中输入重复的值。当使用唯一性
约束时,需要考虑以下几个因素:
① 使用唯一性约束的字段允许为空值 。
② 一个表中可以允许有多个唯一性约束 。
③ 可以把唯一性约束定义在多个字段上 。
④ 唯一性约束用于强制在指定字段上创建一个唯一性
索引 。
⑤ 缺省情况下, 创建的索引类型为非聚簇索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建和修改唯一性约束的操作方法
创建和修改唯一性约束的操作方法有两种:
( 一 ) 企业管理器操作法, 通过企业管理器可以完成
创建和修改唯一性约束的操作 。
( 二 ) Transact-SQL语句操作法 。
CONSTRAINT constraint_name
UNIQUE [CLUSTERED|NONCLUSTERED]
( column_name[,… n])
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,检查约束
一个列级检查约束只能与限制的字段有关;一个
表级检查约束只能与限制的表中字段有关。
一个表中可以定义多个检查约束。
每个 CREATE TABLE语句中每个字段只能定义
一个检查约束。
在多个字段上定义检查约束,则必须将检查约束
定义为表级约束。
当执行 INSERT语句或者 UPDATE语句时,检查
约束将验证数据。
检查约束中不能包含子查询。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建检查约束常用的操作方法有两种:
1.企业管理器操作法。使用企业管理器创建检查约束,
与创建唯一性约束类似 。
2.Transact-SQL语句操作法。检查约束的 Transact-
SQL语句操作法,其语法形式如下:
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
(logical_expression)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-7:
创建了一个学生信息表,其中输入性别字段值时,只能接受,F”
或者,M”,并且为 phonenum字段创建检查约束,限制只能输
入类似 01080798654之类的数据,而不能随意输入其他数据。
create table student(
Id char(8)
name char(8)
sex char(2)
phonenum int
constraint chk_sex check( sex in ( ’ F’,’M’))
Constraint chk_phonenum check
( phonenum like ‘(010)[0-9][0-9][0-9][0-9] [0-
9][0-9][0-9][0-9]’)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,缺省约束
使用缺省约束时,应该注意以下几点:
每个字段只能定义一个缺省约束。
如果定义的缺省值长于其对应字段的允许长度,
那么输入到表中的缺省值将被截断。
不能加入到带有 IDENTITY属性或者数据类型为
timestamp的字段上。
如果字段定义为用户定义的数据类型,而且有一
个缺省绑定到这个数据类型上,则不允许该字段
有缺省约束。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5,外部键约束
外部键约束用于强制参照完整性,提供单个字段
或者多个字段的参照完整性。当使用外部键约束时,
应该考虑以下几个因素:
① 外部键约束提供了字段参照完整性 。
② 外部键从句中的字段数目和每个字段指定的数
据类型必须和 REFERENCES从句中的字段相匹配 。
③ 外部键约束不能自动创建索引, 需要用户手动
创建 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
④ 用户想要修改外部键约束的数据, 必须有
对外部键约束所参考表的 SELECT权限或者
REFERENCES权限 。
⑤ 参考同一表中的字段时, 必须只使用
REFERENCES子句, 不能使用外部键子句 。
⑥ 一个表中最多可以有 31个外部键约束 。
⑦ 在临时表中, 不能使用外部键约束 。
⑧ 主键和外部键的数据类型必须严格匹配 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.4 查看表格
查看表格的定义
2,查看表格中的数据
3,查看表格与其它数据库对象的依赖关系
4,利用系统存储过程 Sp_help查看表的信息
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-10:
⑴ 显示当前数据库中所有对象的信息;
⑵显示表 word的信息。在查询分析器( Query
Analyzer)中它们对应的语句和运行结果如图 5-
24(a)和图 5-24(b)所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-24(a) 当前数据库对象显示窗口
图 5-24(b) 表 word显示窗口
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.2.5 删除表
1,利用企业管理器删除表
在企业管理器中,展开指定的数据库和表格项,
用右键单击要删除的表,从快捷菜单中选择“除去表”
选项,则会出现除去对象对话框。单击“全部删除”
按钮,即可删除表。
2,利用 DROP TABLE语句删除表
DROP TABLE语句可以删除一个表和表中的数
据及其与表有关的所有索引, 触发器, 约束, 许可对
象 。 DROP TABLE语句的语法形式如下:
DROP TABLE table_name
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.1 创建视图
5.3.2 修改和重命名视图
5.3.3 查看视图信息、删除视图
5.3.4 通过视图修改记录
5.3 视图操作
第 5章 数据库对象的操作
返回本章首页上一页 下一页
视图是从一个或者多个表或视图中导出的表,
其结构和数据是建立在对表的查询基础上的。和真实
的表一样,视图也包括几个被定义的数据列和多个数
据行,但从本质上讲,这些数据列和数据行来源于其
所引用的表。因此,视图不是真实存在的基础表而是
一个虚拟表,视图所对应的数据并不实际地以视图结
构存储在数据库中,而是存储在视图所引用的表中。
视图的概念:
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用视图的优点和作用
① 可以使视图集中数据、简化和定制不同用
户对数据库的不同数据要求。
②使用视图可以屏蔽数据的复杂性,用户不
必了解数据库的结构,就可以方便地使用和管理
数据,简化数据权限管理和重新组织数据以便输
出到其他应用程序中。
③视图可以使用户只关心他感兴趣的某些特
定数据和他们所负责的特定任务,而那些不需要
的或者无用的数据则不在视图中显示。
④视图大大地简化了用户对数据的操作。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
⑤ 视图可以让不同的用户以不同的方式看到不
同或者相同的数据集。
⑥在某些情况下,由于表中数据量太大,因此
在表的设计时常将表进行水平或者垂直分割,但
表的结构的变化对应用程序产生不良的影响。
⑦视图提供了一个简单而有效的安全机制。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.1 创建视图
创建视图时应该注意以下情况:
① 只能在当前数据库中创建视图 。
② 如果视图引用的基表或者视图被删除, 则该视图不能再被使用,
直到创建新的基表或者视图 。
③ 如果视图中某一列是函数, 数学表达式, 常量或者来自多个表
的列名相同, 则必须为列定义名称 。
④ 不能在视图上创建索引, 不能在规则, 缺省, 触发器的定义中
引用视图 。
⑤ 当通过视图查询数据时, SQL Server要检查以确保语句中涉及
的所有数据库对象存在, 而且数据修改语句不能违反数据完
整性规则 。
⑥ 视图的名称必须遵循标识符的规则, 且对每个用户必须是唯一
的 。 此外, 该名称不得与该用户拥有的任何表的名称相同 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用企业管理器创建视图
图 5-26,图 5-27(a), 5-27(b),图 5-28,图 5-
29,图 5-30,是利用企业管理器创建视图的具体操作
步骤,用户可根据图中提示创建视图。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-26 选择新建视图选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-27 (a) 新建视图对话框 图 5-27(b) 添加表菜单
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-28 添加表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-29 选择视图字段对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-30 视图属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用 Transact-SQL语句中的 CREATE VIEW
命令创建视图
使用 Transact-SQL语句中的 CREATE VIEW创建视图的语法形
式如下:
CREATE VIEW [ < database_name >,] [ < owner
>,] view_name [ ( column [,...n ] ) ]
[ WITH < view_attribute > [,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
< view_attribute >,:=
{ ENCRYPTION | SCHEMABINDING |
VIEW_METADATA }
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 Transact-SQL语句中的 CREATE VIEW创建视
图的参数说明如下:
view_name用于指定视图的名称, column用于指
定视图中的字段名称 。
WITH ENCRYPTION表示 SQL Server 加密包含
CREATE VIEW 语句文本在内的系统表列 。
select_statement用于创建视图的 SELECT语句, 利
用 SELECT命令可以从表中或者视图中选择列构
成新视图的列 。
WITH CHECK OPTION用于强制视图上执行的
所有数据修改语句都必须符合由 select_statement
设置的准则 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
SCHEMABINDING表示在 select_statement语句
中如果包含表, 视图或者引用用户自定义函数,
则表名, 视图名或者函数名前必须有所有者前缀 。
VIEW_ METADATA表示如果某一查询中引用该
视图且要求返回浏览模式的元数据时, 那么 SQL
Server将向 DBLIB和 OLE DB APIS返回视图的元
数据信息 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-12:
选择表 student和 teacher中的部分字段和记录创建视图,
并且限制表 student中的记录只能是名称为“张三”的记录集
合,视图定义为 view_part,其程序清单如下:
create view view_part
as
Select student.name,
student.age,student.sex,
teacher.name,age,salary
from
student,teacher
where student.name=’张三 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,利用向导创建视图
图 5-31 --图 5-38 是利用向导创建视图 的具体步骤。
图 5-31 选择工具菜单中的向导命令
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-32 欢迎使用创建视图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-33 选择数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-34 选择对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-35 选择字段对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-36 定义限制对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-37 命名视图对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-38 完成创建视图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.2 修改和重命名视图
1,修改视图
( 1)利用企业管理器 修改视图。
( 2)使用 ALTER VIEW语句修改视图 。
ALTER VIEW view_name
[(column[,...n])]
[WITHENCRYPTION]
AS
select_statement
[ WITH CHECK OPTION ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,重命名视图
( 1)利用企业管理器重命名视图 。
( 2)可以使用系统存储过程 sp_rename修改视图的名
称,该过程的语法形式如下:
sp_rename old_name,new_name
例子 5-14:把视图 v_all重命名为 v_part,其程序清单
如下:
sp_rename v_all,v_part
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.3 查看视图信息、删除视图
1,查看视图信息
每当创建了一个新的视图后, 则在系统说明的系
统表中就定义了该视图的存储, 因此, 可以使用系统
存储过程 sp_help显示视图特征, 使用 sp_helptext显
示视图在系统表中的定义, 使用 sp_depends显示该视
图所依赖的对象 。 它们的语法形式分别如下:
( 1) sp_help 数据库对象名称
( 2) sp_helptext 视图(触发器、存储过程)
( 3) sp_depends 数据库对象名称
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 SQL Server 查询分析器和企业管理器来显示
视图
使用 SQL Server 查询分析器 ( Query Analyzer)
可以方便地显示视图信息, 如图 5-42所示, 该对话框
显示了使用 sp_helptext存储过程显示视图 v_employee
的特征 。
另外,也可以使用企业管理器来显示视图的定
义,如图 5-43所示。
利用企业管理器也可以查看视图的输出数据,如
图 5-44所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-42 显示视图信息对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-43 视图属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-44 视图输出数据窗口
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,删除视图
( 1) 使用企业管理器删除视图的操作方法为如
图 5-45和图 5-46所示 。
( 2) 使用 Transact-SQL语句 DROP VIEW删除
视图的语法形式如下:
DROP VIEW {view_name} [,… n]
可以使用该命令同时删除多个视图, 只需在要删
除的视图名称之间用逗号隔开即可 。
例子 5-15:同时删除视图 v_student和 v_teacher,
其程序清单如下:
drop view v_student,v_teacher
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-45 除去对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-46 显示相关性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.3.4 通过视图修改记录
使用视图修改数据时,需要注意以下几点:
修改视图中的数据时, 不能同时修改两个或者多个基
表, 可以对基于两个或多个基表或者视图的视图进行
修改, 但是每次修改都只能影响一个基表 。
不能修改那些通过计算得到的字段 。
如果在创建视图时指定了 WITH CHECK OPTION选
项, 那么所有使用视图修改数据库信息时, 必须保证
修改后的数据满足视图定义的范围 。
执行 UPDATE,DELETE命令时, 所删除与更新的数
据必须包含在视图的结果集中 。
如果视图引用多个表时, 无法用 DELETE命令删除数
据 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,插入数据记录
例子 5-16:首先创建了一个新的视图 v_employees,该视图基于
表 employees创建 。
create view v_employees(number,name,age,
sex,salary)
as
select number,name,age,sex,salary
from employees
where name=’张三 ’
然后, 通过执行以下语句使用该视图向表 employees中添加一条
新的数据记录 。
Insert into v_employees
Values(001,’李力 ’,22,’m’,2000)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,更新数据记录
使用视图可以更新数据记录, 但应该注意的是, 更新的只
是数据库中的基表 。
例子 5-19, 创 建 了 一 个 基 于 表 employees 的 视 图
v_employees,然后通过该视图修改表 employees中的记录 。 其
程序清单如下:
create view v_employees
as
select * from employees
update v_employees
set name=’张然 ’
where name=’张三 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,删除数据记录
使用视图删除记录, 可以删除任何基表中的记录,
直接利用 DELETE语句删除记录即可 。 但应该注意,
必须指定在视图中定义过的字段来删除记录 。
例子 5-20:利用视图 v_employees删除表 employees
中姓名为张然的记录 。 其程序清单为:
delete from v_employees
where name=’张然 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4 索引操作
5.4.1 创建索引
5.4.2 查看, 修改和删除索引
第 5章 数据库对象的操作
返回本章首页上一页 下一页
一、什么叫索引
数据库中的索引与书籍中的索引类似,在一本书
中,利用索引可以快速查找所需信息,无须阅读整本
书。在数据库中,索引使数据库程序无须对整个表进
行扫描,就可以在其中找到所需数据。书中的索引是
一个词语列表,其中注明了包含各个词的页码。而数
据库中的索引是某个表中一列或者若干列值的集合和
相应的指向表中物理标识这些值的数据页的逻辑指针
清单。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
二、索引的作用
通过创建唯一索引, 可以保证数据记录的唯一性 。
可以大大加快数据检索速度 。
可以加速表与表之间的连接, 这一点在实现数据
的参照完整性方面有特别的意义 。
在使用 ORDER BY和 GROUP BY子句中进行检索
数据时, 可以显著减少查询中分组和排序的时间 。
使用索引可以在检索数据的过程中使用优化隐藏
器, 提高系统性能 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
聚集索引与非聚集索引
聚集索引对表的物理数据页中的数据按列进行排
序,然后再重新存储到磁盘上,即聚集索引与数据是
混为一体的,它的叶节点中存储的是实际的数据。
非聚集索引具有完全独立于数据行的结构,使用
非聚集索引不用将物理数据页中的数据按列排序。非
聚集索引的叶节点存储了组成非聚集索引的关键字值
和行定位器。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4.1 创建索引
SQL Server 2000创建索引的方法
( 1)利用企业管理器中的索引向导创建索引。
( 2)利用企业管理器直接创建索引。
( 3)利用 Transact-SQL语句中的 CREATE
INDEX命令创建索引。
( 4)利用企业管理器中的索引优化向导创建索引。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,利用索引向导创建索引
如图 5-47 --图 5-52 所示。
图 5-47 欢迎使用创建索引向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-48 选择数据库和对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-49 显示当前索引信息对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-50 选择创建索引的列对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-51 指定索引选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-52 指定索引名称对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,利用企业管理器直接创建索引
其具体步骤如下:
(1)在企业管理器中,展开指定的服务器和
数据库,选择要创建索引的表,用右键单击该表,
从弹出的快捷菜单中选择所有任务项的管理索引选
项(如图 5-53所示),就会出现管理索引对话框,
如图 5-54所示。在该对话框中,可以选择要处理的
数据库和表 。
(2)单击“新建”按钮,则出现新建索引对
话框,如图 5-55所示。
(3)选择完成后单击“确定”按钮,即可生
成新的索引;单击“取消”按钮,则取消新建索引
的操作。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-53 选择管理索引选项对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-54 管理索引对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-55 新建索引对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,利用 Transact-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 ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
CREATE INDEX命令创建索引各参数说明如下:
UNIQUE:用于指定为表或视图创建唯一索引,即不允许存
在索引值相同的两行。
CLUSTERED:用于指定创建的索引为聚集索引。
NONCLUSTERED:用于指定创建的索引为非聚集索引。
index_name,用于指定所创建的索引的名称。
table,用于指定创建索引的表的名称。
view,用于指定创建索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
Column,用于指定被索引的列。
PAD_INDEX:用于指定索引中间级中每个页(节点)上保持
开放的空间。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
FILLFACTOR = fillfactor:用于指定在创建索引时,每个索
引页的数据占索引页大小的百分比,fillfactor的值为 1到 100。
IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集索
引中的列中插入重复数据时 SQL Server所作的反应。
DROP_EXISTING:用于指定应删除并重新创建已命名的先
前存在的聚集索引或者非聚集索引。
STATISTICS_NORECOMPUTE:用于指定过期的索引统计
不会自动重新计算。
SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果
将存储在 tempdb 数据库中。
ON filegroup:用于指定存放索引的文件组。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-21:
例子 5-21:为表 employees创建了一个唯一聚集索引, 其程序
清单如下:
CREATE UNIQUE CLUSTERED INDEX number_ind
ON employees (number)
with
pad_index,
fillfactor=20,
ignore_dup_key,
drop_existing,
statistics_norecompute
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-22:
为表 employees创建了一个复合索引, 其程序清单如
下:
create index employees_cpl_ind
on employees(name,age)
with
pad_index,
fillfactor=50
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,利用索引优化向导创建索引
索引优化向导可以完成以下几方面的工作:
( 1) 根据给定的工作负荷, 通过使用查询优化器
分析该工作负荷中的查询, 为数据库推荐最佳索引组合 。
( 2) 分析所建议的更改将会产生的影响, 包括索引
的使用, 查询在表之间的分布, 以及查询在工作负荷中
的性能 。
( 3) 推荐为执行一个小型的问题查询集而对数据库
进行优化的方法 。
( 4) 通过设定高级选项如磁盘空间约束, 最大查询
语句数和每个索引最多对应字段数等, 允许定制推荐方
式 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用索引优化向导创建和优化索引的具体步骤如下:
如图 5-56 --图 5-65 所示。
图 5-56 欢迎使用索引优化向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-57 选择服务器和数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-58 连接服务器对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-59 选择服务器对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-61 修改缺省优化参数对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-62 选择要优化的表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-63 索引建议对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-64 索引分析对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-65 完成索引优化向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.4.2 查看、修改和删除索引
1,利用企业管理器查看, 修改和删除索引
要查看和修改索引的详细信息, 可以在企业管理器中,
展开指定的服务器和数据库项, 用右键单击要查看的表, 从弹
出的快捷菜单中选择所有任务子菜单中的, 管理索引, 选项,
则会出现管理索引对话框 。 选择要查看或者修改的索引, 单击
,编辑, 按钮, 就会出现修改索引对话框 。 在该对话框中, 可
以修改索引的大部分设置, 还可以直接修改其 SQL脚本, 只需
按下, 编辑 SQL…,按钮, 即可出现编辑 SQL脚本对话框, 其
中可以编辑, 测试和运行索引的 SQL脚本 。
要删除索引, 可以在企业管理器中, 从管理索引对话框
中或者表的属性对话框中, 选择要删除的索引, 单击, 删除,
按钮, 即可删除索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,用系统存储过程查看和更改索引名称
系统存储过程 sp_helpindex可以返回表的所有索
引信息, 其语法形式如下:
sp_helpindex [@objname=]’name’
其中 [@objname=]’name’参数用于指定当前数据
库中的表的名称。
另外, 系统存储过程 sp_rename可以用来更改索
引的名称, 其语法形式如下:
sp_rename[@objname=]'object_name',
[@newname=]'new_name'
[,[ @objtype = ] 'object_type' ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-23:
更改 employees表中的索引 employees_name_index名
称为 employees_name_ind,其程序清单如下:
Exec sp_rename
‘employees.[employees_name_index]’,
‘employees_name_ind’,‘index’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 Transact-SQL语句中的 DROP INDEX命令删
除索引
当不再需要某个索引时, 可以将其删除, DROP
INDEX命令可以删除一个或者多个当前数据库中的索
引, 其语法形式如下:
DROP INDEX 'table.index | view.index' [,...n ]
其中, table | view用于指定索引列所在的表或索
引视图; index用于指定要删除的索引名称 。 注意,
DROP INDEX命令不能删除由 CREATE TABLE或者
ALTER TABLE命令创建的主键或者唯一性约束索引,
也不能删除系统表中的索引 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5 存储过程
5.5.1 创建存储过程
5.5.2 执行存储过程
5.5.3 查看和修改存储过程
5.5.4 重命名和删除存储过程
第 5章 数据库对象的操作
返回本章首页上一页 下一页
存储过程的概念
SQL Server提供了一种方法,它可以将一些固定
的操作集中起来由 SQL Server数据库服务器来完成,
以实现某个任务,这种方法就是存储过程。
在 SQL Server中存储过程分为两类:即系统提供
的存储过程和用户自定义的存储过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.1 创建存储过程
在 SQL Server中,可以使用三种方法创建存储过
程,
①使用创建存储过程向导创建存储过程。
②利用 SQL Server 企业管理器创建存储过程。
③使用 Transact-SQL语句中的 CREATE
PROCEDURE命令创建存储过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
创建存储过程时,需要确定存储过程的三个组
成部分:
① 所有的输入参数以及传给调用者的输出参数 。
② 被执行的针对数据库的操作语句, 包括调用
其它存储过程的语句 。
③ 返回给调用者的状态值, 以指明调用是成功
还是失败 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,使用创建存储过程向导创建存储过程
在企业管理器中,
选择工具菜单中的向
导选项, 选择, 创建
存储过程向导, ( 如
图 3-1所示 ), 则出
现欢迎使用创建存储
过程向导对话框, 如
图 5-71所示 。 根据图
5-71-- 图 5-76提示 可
完成创建存储过程 。 图 3-1 新建 SQL Server组
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-71 欢迎使用创建存储过程向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-72 选择数据库对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-73 选择数据库对象对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-74 完成创建存储过程向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-75 编辑存储过程属性对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-76 编辑存储过程 SQL对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,使用 SQL Server 企业管理器创建存储过程
( 1 ) 在 SQL Server企业管理器中, 选择指定的
服务器和数据库, 用右键单击要创建存储过程的数
据库, 在弹出的快捷菜单中选择, 新建, 选项, 再
选择下一级菜单中的, 存储过程 …,选项, 如图 5-77
所示;或者用右键单击存储过程图标, 从弹出的快
捷菜单中选择, 新建存储过程 …,选项, 如图 5-78所
示 。 均会出现创建存储过程对话框, 如图 5-79所示 。
(2)在文本框中可以输入创建存储过程的
T_SQL语句,单击“检查语法”,则可以检查语法
是否正确;单击“确定”按钮,即可保存该存储过
程。如果要设置权限,单击“权限 …” 按钮,如图 5-
80所示。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-77 选择新建存储过程对话框( 1)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-78 选择新建存储过程对话框( 2)
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-79 新建存储过程对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-80 设置权限对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 Transact-SQL语句中的 CREATE
PROCEDURE命令创建存储过程
创建存储过程前, 应该考虑下列几个事项:
① 不能将 CREATE PROCEDURE 语句与其它 SQL
语句组合到单个批处理中 。
② 创建存储过程的权限默认属于数据库所有者, 该所
有者可将此权限授予其他用户 。
③ 存储过程是数据库对象, 其名称必须遵守标识符规
则 。
④ 只能在当前数据库中创建存储过程 。
⑤ 一个存储过程的最大尺寸为 128M。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
使用 CREATE PROCEDURE创建存储过程的语法形
式如下:
CREATEPROC[EDURE]procedure_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]
][,...n]
WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRY
PTION}]
[FORREPLICATION]
AS sql_statement [,..n ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
用 CREATE PROCEDURE创建存储过程的语法 参数
的意义如下:
procedure_name:用于指定要创建的存储过程的名称。
number:该参数是可选的整数,它用来对同名的存储过程
分组,以便用一条 DROP PROCEDURE 语句即可将同组的
过程一起除去。
@parameter:过程中的参数。在 CREATE PROCEDURE
语句中可以声明一个或多个参数。
data_type:用于指定参数的数据类型。
VARYING:用于指定作为输出 OUTPUT参数支持的结果集。
Default:用于指定参数的默认值。
OUTPUT:表明该参数是一个返回参数。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
RECOMPILE:表明 SQL Server 不会保存该存储
过程的执行计划 。
ENCRYPTION,表示 SQL Server 加密了
syscomments 表,该表的 text字段是包含 CREATE
PROCEDURE 语句的存储过程文本。
FOR REPLICATION:用于指定不能在订阅服务
器上执行为复制创建的存储过程。
AS:用于指定该存储过程要执行的操作。
sql_statement:是存储过程中要包含的任意数目和
类型的 Transact-SQL 语句。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.2 执行存储过程
直接执行存储过程可以使用 EXECUTE命令来执行,
其语法形式如下:
[[EXEC[UTE]]
{
[@return_status=]
{procedure_name[;number]|@procedu
re_name_var}
[[@parameter=]{value|@variable[OUTPU
T]|[DEFAULT]}
[,...n]
[ WITH RECOMPILE ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-27:
使用 EXECUTE 命令传递单个参数, 它执行 showind 存储过程,
以 titles 为参数值 。 showind 存储过程需要参数 (@tabname),
它是一个表的名称 。 其程序清单如下:
EXEC showind titles
当然, 在执行过程中变量可以显式命名:
EXEC showind @tabname = titles
如果这是 isql 脚本或批处理中第一个语句, 则 EXEC 语句可以
省略:
showind titles或者 showind @tabname = titles
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.3 查看和修改存储过程
查看存储过程
存储过程被创建之后, 它的名字就存储在系统表
sysobjects中, 它的源代码存放在系统表 syscomments
中 。 可以使用使用企业管理器或系统存储过程来查看
用户创建的存储过程 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
( 1)使用企业管理器查看用户创建的存储过程
在企业管理器中,打开指定的服务器和数据库
项,选择要创建存储过程的数据库,单击存储过程文
件夹,此时在右边的页框中显示该数据库的所有存储
过程。用右键单击要查看的存储过程,从弹出的快捷
菜单中选择属性选项,此时便可以看到存储过程的源
代码。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
( 2)使用系统存储过程来查看用户创建的存储过程
可供使用的系统存储过程及其语法形式如下:
sp_help:用于显示存储过程的参数及其数据类型
sp_help [[@objname=] name]
参数 name为要查看的存储过程的名称 。
sp_helptext:用于显示存储过程的源代码
sp_helptext [[@objname=] name]
参数 name为要查看的存储过程的名称 。
sp_depends:用于显示和存储过程相关的数据库对象
sp_depends [@objname=]’object’
参数 object为要查看依赖关系的存储过程的名称 。
sp_stored_procedures:用于返回当前数据库中的存储过程
列表
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,修改存储过程
存储过程可以根据用户的要求或者基表定义的改变而改
变 。 使用 ALTER PROCEDURE语句可以更改先前通过执行
CREATE PROCEDURE 语句创建的过程, 但不会更改权限,
也不影响相关的存储过程或触发器 。 其语法形式如下:
ALTERPROC[EDURE]procedure_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]][,...n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
AS
sql_statement [,..n ]
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-29:
创建了一个名为 Oakland_authors 的过程, 默认
情况下, 该过程包含所有来自加利福尼亚州奥克兰市
的作者 。 随后授予了权限 。 然后, 当该过程需更改为
能够检索所有来自加利福尼亚州的作者时, 用
ALTER PROCEDURE 重新定义了该存储过程 。 其程
序清单如下:
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.5.4 重命名和删除存储过程
1,重命名存储过程
修改存储过程的名称可以使用系统存储过程
sp_rename,其语法形式如下:
sp_rename 原存储过程名称, 新存储过程名称
另外,通过企业管理器也可以修改存储过程的名
称。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,删除存储过程
删除存储过程可以使用 DROP命令, DROP命令
可以将一个或者多个存储过程或者存储过程组从当前
数据库中删除, 其语法形式如下:
drop procedure {procedure} [,… n]
当然,利用企业管理器也可以很方便地删除存储
过程。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6 触发器
5.6.1 创建触发器
5.6.2 查看、修改和删除触发器
5.6.3 触发器的应用
第 5章 数据库对象的操作
返回本章首页上一页 下一页
触发器
触发器是一种特殊类型的存储过程, 它不同于前
面介绍过的存储过程 。 触发器主要是通过事件进行触
发而被执行的, 而存储过程可以通过存储过程名称而
被直接调用 。 触发器是一个功能强大的工具, 它使每
个站点可以在有数据修改时自动强制执行其业务规则 。
触发器可以用于 SQL Server 约束, 默认值和规则的
完整性检查 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
触发器主要优点如下:
触发器是自动的:当对表中的数据作了任何修改
(比如手工输入或者应用程序采取的操作)之后立即
被激活。
触发器可以通过数据库中的相关表进行层叠更改。
触发器可以强制限制,这些限制比用 CHECK 约
束所定义的更复杂。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.1 创建触发器
创建触发器应该考虑以下几个问题:
① CREATE TRIGGER 语句必须是批处理中的第一个语句。
②创建触发器的权限默认分配给表的所有者,且不能将该权限
转给其他用户。
③触发器为数据库对象,其名称必须遵循标识符的命名规则。
④虽然触发器可以引用当前数据库以外的对象,但只能在当前
数据库中创建触发器。
⑤虽然不能在临时表或系统表上创建触发器,但是触发器可以
引用临时表。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
⑥ 在含有用 DELETE 或 UPDATE 操作定义的外键的表中, 不
能定义 INSTEAD OF 和 INSTEAD OF UPDATE 触发器 。
⑦ 虽然 TRUNCATE TABLE 语句类似于没有 WHERE 子句
( 用于删除行 ) 的 DELETE 语句, 但它并不会引发
DELETE 触发器, 因为 TRUNCATE TABLE 语句没有记录 。
⑧ WRITETEXT 语句不会引发 INSERT 或 UPDATE 触发器 。
⑨ 当创建一个触发器时必须指定,⑴ 名称; ⑵ 在其上定义触发
器的表; ⑶ 触发器将何时激发; ⑷ 激活触发器的数据修改语
句 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
1,使用企业管理器创建触发器
在企业管理器中, 展开指定的服务器和数据库项,
然后展开要在其上创建触发器的表所在的数据库, 用
右键单击该表, 从弹出的快捷菜单中选择所有任务子
菜单下的管理触发器选项, 则会出现触发器属性对话
框 。 在该对话框中, 在名称文本框中选择新建, 然后
在文本框中输入触发器文本 。 单击, 检查语法, 按钮,
则可以检查语法是否正确 。 单击, 应用, 按钮, 则在
名称下拉列表中会有新创建的触发器名称 。 最后, 单
击, 确定, 按钮, 即可关闭该对话框, 成功创建触发
器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,使用 CREATE TRIGGER命令创建触发器
其语法形式如下:
CREATE TRIGGER trigger_name
ON{table|view}
[WITHENCRYPTION]
{
{ { FOR | AFTER | INSTEAD OF }
{ [DELETE][,][ INSERT ] [,] [ UPDATE ] }
[WITHAPPEND]
[NOTFORREPLICATION]
AS
第 5章 数据库对象的操作
返回本章首页上一页 下一页
[{IFUPDATE(column)
[{AND|OR}UPDATE(column)]
[...n]
|IF(COLUMNS_UPDATED(){bitwise_opera
tor}updated_bitmask)
{comparison_operator}column_bitm
ask[...n]
}]
sql_statement[...n]
}
}
第 5章 数据库对象的操作
返回本章首页上一页 下一页
例子 5-30:
创建了一个触发器, 在 titles 表上创建一个插入, 更新类
型的触发器, 其程序清单如下:
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type =
'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT,UPDATE
AS sql_statements
GO
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.2 查看、修改和删除触发器
1,查看触发器
( 1 ) 使用企业管理器查看触发器信息
( 2 ) 使用系统存储过程查看触发器
第 5章 数据库对象的操作
返回本章首页上一页 下一页
sp_help,sp_helptext和 sp_depends具体用途和语法形
式如下。
sp_help:用于查看触发器的一般信息, 如触发器的
名称, 属性, 类型和创建时间 。
sp_help ‘触发器名称 ’
sp_helptext:用于查看触发器的正文信息
sp_helptext ‘触发器名称 ’
sp_depends:用于查看指定触发器所引用的表或者指
定的表涉及到的所有触发器 。
sp_depends ’触发器名称 ’
sp_depends ‘表名 ’
第 5章 数据库对象的操作
返回本章首页上一页 下一页
2,修改触发器
( 1 ) 使用企业管理器修改触发器正文
在企业管理器中,展开指定的服务器和数据库,
选择指定的数据库和表,用右键单击要修改的表,从
弹出的快捷菜单中选择所有任务子菜单下的管理触发
器选项,则会出现触发器属性对话框。在名称选项框
中选择要修改的触发器的名称,然后在文本框中修改
触发器的 SQL语句,单击“检查语法”按钮,可以检
查语法是否正确。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
(2)使用 sp_rename命令修改触发器的名称
sp_rename命令的语法形式如下:
sp_rename oldname,newname
第 5章 数据库对象的操作
返回本章首页上一页 下一页
(3)使用 alter trigger命令修改触发器正文
alter trigger命令的语法形式如下:
ALTERTRIGGERtrigger_name
ON(table|view)
[WITHENCRYPTION]
{
{ ( FOR | AFTER | INSTEAD OF ) { [ DELETE ]
[,] [ INSERT ] [,] [ UPDATE ] }
[NOTFORREPLICATION]
AS
sql_statement[...n]}
|
第 5章 数据库对象的操作
返回本章首页上一页 下一页
{(FOR|AFTER|INSTEADOF){[INSERT][,]UPDATE}}
[NOTFORREPLICATION]
AS
{IFUPDATE(column)
[{AND|OR}UPDATE(column)]
[...n]
| IF ( COLUMNS_UPDATED ( )
{ bitwise_operator } updated_bitmask )
{comparison_operator}column_bitmask[...n]
}
sql_statement[...n]
}
}
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,删除触发器
( 1 ) 使用系统命令 DROP TRIGGER删除指定
的触发器, 其语法形式如下:
DROP TRIGGER { trigger } [,...n ]
( 2 ) 删除触发器所在的表时, SQL Server将会
自动删除与该表相关的触发器 。
( 3 ) 在企业管理器中, 用右键单击要删除的触
发器所在的表, 从弹出的快捷菜单中选择所有任务子
菜单下的管理触发器选项, 则会出现触发器属性对话
框 。 在名称选项框中选择要删除的触发器, 单击, 删
除, 按钮, 即可删除该触发器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.6.3 触发器的应用
1,使用 INSERT触发器
INSERT触发器通常被用来更新时间标记字段,
或者验证被触发器监控的字段中的数据满足要求的
标准,以确保数据完整性。
例子 5-31:
2,使用 UPDATE触发器
修改触发器和插入触发器的工作过程基本上一致,
修改一条记录等于插入了一条新的记录并且删除一
条旧的记录。
例子 5-32和 5-33
第 5章 数据库对象的操作
返回本章首页上一页 下一页
3,使用 DELETE触发器
DELETE触发器通常用于两种情况, 第一种情况
是为了防止那些确实需要删除但会引起数据一致性问
题的记录的删除 。
第二种情况是执行可删除主记录的子记录的级联
删除操作 。 可以使用这样的触发器从主销售记录中删
除所有的定单项 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
4,使用嵌套的触发器
如果一个触发器在执行操作时引发了另一个触发
器, 而这个触发器又接着引发下一个触发器 …… 这些
触发器就是嵌套触发器 。 触发器可嵌套至 32 层, 并
且可以控制是否可以通过 "嵌套触发器 "服务器配置选
项进行触发器嵌套 。 如果允许使用嵌套触发器, 且链
中的一个触发器开始一个无限循环, 则超出嵌套级,
而且触发器将终止 。 在执行过程中, 如果一个触发器
修改某个表, 而这个表已经有其它触发器, 这是就要
使用嵌套触发器 。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
5.7 图 表
图表(又称关系图)是 SQL Server中一类特殊
的数据库对象,它提供给用户直观地管理数据库表的
方法。通过图表,用户可以直观地创建、编辑数据库
表之间的关系,也可以编辑表及其列的属性。
第 5章 数据库对象的操作
返回本章首页上一页 下一页
利用企业管理器创建图表的具体步骤如下:
图 5-85--图 5-87所示 。
图 5-85 欢迎使用创建数据库关系图向导对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-86 选择要添加的表对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
图 5-87 完成数据库关系图创建对话框
第 5章 数据库对象的操作
返回本章首页上一页 下一页
Thank you very much!
谢
谢
您
的
光
临
,
再
见
!
下一章