2023年6月21日发(作者:)
·22·
第3章 SQL Server数据库基础综述
SQL Server数据库具有关系型数据库的所有特征,和许多主流数据库产品相同,目的都是为了方便、有效地存取数据,对数据进行有效的维护管理等。数据库之所以流行,在企业运营、信息管理等扮演着越来越重要的角色,是因为其已经形成了完善的理论,并为数据管理提供了系统的科学支持。因此理解数据库的基础知识,有助于更好的操作和使用数据库。本章重点介绍数据库的基本概念,并结合SQL
Server数据库对这些概念进行讲解,方便读者的理解和应用。
3.1 数据库基本概念
数据库管理技术经过长期的发展,已经形成了系统的科学理论,本节就数据库知识的基本概念做一简单介绍,使读者了解数据库的基本内容、数据库的理论框架。
3.1.1 数据与信息
数据(Data)是描述事物的符号记录,它具有多种表现形式,可以是文字、图形、图像、声音、语言等。SQL Server 2005数据库就是存储管理这样的记录的计算机系统。增强的功能使得SQL Server 2005数据库能够更加方便的管理声音、图像等数据,并可以对文字进行全文搜索。
信息具有可感知、可存储、可加工、可传递和可再生等自然属性,信息已是社会各行各业不可缺少的资源,这是信息的社会属性。数据是经过组织的比特的集合,而信息是具有特定释义和意义的数据。
3.1.2 数据库
数据库(Database,DB)是指长期储存在计算机内的、有组织的、可共享的数据集合。数据中的数据按一定的数学模型组织、描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。
3.1.3 数据库系统
数据库系统(Database System,DBS)广义上讲是由数据库、硬件、软件和人员组成,其中管理的对象是数据。数据是经过组织的比特的集合,而信息是具有特定释义和意义的数据。例如:一个生产型企业的数据库系统,广义上可能包括“生产数据集合”、“SQL Server 2005数据库软件系统”、“数据库服务器等硬件”和“数据管理和设计人员”。
3.1.4 数据库管理系统(DBMS)
数据库管理系统(Database Management System),DBMS是位于用户与操作系统之间的一层数据管
22 ·23·理软件,是数据库系统的核心,在操作系统的支持下,解决如何科学的组织和储存数据,如何高效的获取和维护数据库的系统软件。其主要功能包括数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护。数据库管理系统可以分为层次型、网状型、关系型、面向对象型DBMS。
SQL Server 2005就是这样的数据库管理系统,SQL Server 支持关系型数据库模型,并对传统的数据库管理系统有了许多新的扩展。
3.2 数据库管理系统的基本功能
数据库管理系统主要是实现对共享数据有效组织、管理和存取,因此应具有系统的管理和维护的功能,其中最基本的功能有以下五种。其中数据定义语言和数据操纵语言对于初学者最为常用,会在后面的章节中进行详细的介绍。
3.2.1 定义数据
数据定义,数据库管理系统提供定义数据类型和数据存储形式的功能。每个记录的每个字段中的信息为一个数据。因记录的信息不同,其数据类型也应不同。通过定义数据类型,可以在一定程度上保证数据的完整性。
数据库管理系统提供数据定义语言(data definition language,DDL),用户可以对数据库的结构描述定义,包括数据库的完整性、安全保密定义,如口令、级别、存取权限等。这些定义存储在数据字典中,是数据库管理系统基本依据,如后面讲述的CREATE、DROP等语句均属于该类型。
3.2.2 处理数据
数据操作,数据库管理系统提供多种处理数据的方式,一般采用数据操纵语言(data manipulation
language,DML),实现对数据库中数据的基本操作,如检索、插入、修改和删除。例如,经常使用“SELECT”语句在一张表中查找信息,在几个相关的表或文件中进行复合的查找;使用“UPDATE”语句使用相应的命令更新一个字段或多个记录的内容;用一个命令对数据进行统计,甚至可以使用数据库管理系统工具进行编程,以实现更加复杂的功能。
DML分为两类:宿主型和自含型。所谓宿主型是指将DML语句嵌入某种主语言(如C、COBOL等)中使用;自含型是指可以单使用DML语句,供用户交互使用。
在SQL Server 2005数据库中,微软公司对这两种方式进行支持和扩展。即可以通过SQL Server
Management Studio工具,编写TSQL的DML语句操作数据,也可以使用第三方语言,操作数据,进行程序开发。
3.2.3 数据库运行管理
数据控制,数据库管理系统对数据提供一定的保护措施,即在运行期间,多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等是数据库管理系统的重要组成部分。
在保证在多个用户共享数据时,只有被授权的用户才能查看或修改数据,以保证数据的安全性。即
23·24·
根据用户的职责,不同级别的人对数据库具有不同的权限,数据库管理系统应该确保数据的安全性。
3.2.4 数据组织、存储和管理
数据库管理系统分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等等;要确定以何种文件结构和存取方式在存储级上组织这些数据,以提高存取效率。实现数据间的联系、数据组织和存储的基本目标,是提高存储空间利用率。
3.2.5 数据库的建立和维护
数据库的建立和维护,包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构、性能监测和分析等。
3.3 数据库的类型
数据库技术发展阶段的划分应该以数据模型的发展演变作为主要依据和标志。总体说来,数据库技术从开始到现在一共经历了三个发展阶段:第一代是网状、层次数据库系统,第二代是关系数据库系统,第三代是以面向对象数据模型为主要特征的数据库系统。SQL Server 2005数据库是以关系数据模型为基础的数据库,同时增加了许多下一代数据库系统的新特性。
3.3.1 层次型数据库
层次型数据库管理系统是紧随网状数据库而出现的。现实世界中很多事物是按层次组织起来的。层次数据模型的提出,首先是为了模拟这种按层次组织起来的事物。层次数据库也是按记录来存取数据的。
层次数据模型中最基本的数据关系是基本层次关系,它代表两个记录型之间一对多的关系,即双亲子女关系。数据库中有且仅有一个记录型无双亲,称为根节点。其他记录型有且仅有一个双亲。在层次模型中从一个节点到其双亲的映射是惟一的,所以对每一个记录型(除根节点外)只需要指出它的双亲,就可以表示出层次模型的整体结构。
3.3.2 网络型数据库
网状数据库。第一代包括网状和层次数据库系统,是因为它们的数据模型虽然分别为层次和网状模型,但实质上层次模型只是网状模型的特例而已。这二者都是格式化数据模型,都是在60年代后期研究和开发的,不论是体系结构、数据库语言,还是数据的存储管理,都具有共同特征,所以它们应该划分为一代。
3.3.3 关系型数据库
第二代数据库系统支持关系数据模型。关系模型不仅具有简单、清晰的优点,而且有关系代数作为语言模型,有关系数据理论作为理论基础。因此关系数据库具有形式基础好、数据独立性强、数据库语
24 ·25·言非过程化等特点。现在的主流数据库如SQL Server、Oracle、MySQL都满足关系数据模型。
3.4 SQL Server的数据库对象
一个数据库往往由多种数据对象构成,SQL Server数据库的数据元素包括数据表、视图、索引等,本节就这些数据对象进行介绍,并结合案例数据库进行说明。这些数据对象的维护、管理的具体使用,将在后面的章节详细介绍。
3.4.1 表(Table)
数据表,这里简称“表”,是包含数据库中所有数据的数据库对象。表定义为一个列集合。数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的。每一行代表一条唯一的记录,每一列代表记录中的一个字段。
在SQL Server 2005数据库中,表是数据最原始的存储位置。用户可以在SQL Server Management
Studio工具的“对象资源管理器”中查看到“表”目录。该目录下显示数据库中的所有数据表。例如,在AdventureWorks示例数据库中,包含公司雇员数据的表中,每一行记录代表一名雇员,各列分别代表该雇员的信息,如雇员编号、姓名、地址、职位以及家庭电话号码等。用户可以通过以下步骤查看SQL
Server 2005数据库中的数据表。
(1)单击“开始|所有程序|Microsoft SQL Server 2005|SQL Server Management Studio”菜单命令,启动SQL Server Management Studio工具。
(2)在“对象资源管理器”中,连接到SQL Server 2005数据库引擎实例,再展开该实例。
(3)图3.1显示了在AdventureWorks示例数据库中的“表”目录。一个数据库可由多个数据表构成。
(4)右击该表,选择“打开表”菜单命令,图3.2显示了AdventureWorks示例数据库中,打开ment表的结果。
图3.1 查看SQL Server 数据库的数据表 图3.2 查看AdventureWorks数据库的Department数据表
25·26·
3.4.2 视图(View)
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图在数据库中并不是直接存储为物理数据,而是“引用”了数据表中的数据。除非是SQL Server 2005数据库中物化的索引视图(在后面的章节会讲述该视图)。
视图的行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。
在SQL Server中分布式查询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储单位在不同地区的数据,而用户需要将这些服务器上结构相似的数据组合起来,这种方式就很有用。通过视图进行查询没有任何限制,通过它们也可以进行数据修改。
对于SQL Server 2005数据库,参考3.4.1节启动SQL Server Management Studio工具,在“对象资源管理器”中,可以浏览到“视图”目录,如图3.3所示。可以看到,包括了系统视图和用户定义视图。
图3.3 查看SQL Server 数据库的视图
3.4.3 索引(Index)
数据库中的索引,帮助用户快速查找表或索引视图中的指定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。
索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一种数据结构(B树)中,使SQL Server可以快速有效地查找与键值关联的行。
SQL Server 2005数据库提供了丰富的索引类型,主要包括聚集索引、非聚集索引、唯一索引、包含性索引等,还提供了索引视图、全文、XML等高级索引,这些索引的具体使用,请参考第15章。
26 ·27·3.4.4 主键(Primary Key)
数据表中一般都包括这样的一列或者一组列,它用于唯一标识表中每一行,这样的一列或多列称为表的主键,它用于强制数据表的实体完整性。在创建或修改表时,用户可以通过定义主键约束来创建主键。一个表只能有一个主键约束,并且主键约束中的列不能接受空值。由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。
3.4.5 外键(Foreign Key)
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键做主关键字的表被称为主表,具有此外键的表被称为主表的从表,外键又称作外关键字。
3.4.6 存储过程(Stored Procedure)
存储过程是由流控制语句和SQL语句编写的一组代码,存储过程经编译和优化后,存储在数据库服务器中,使用时只要调用即可运行。
在SQL Server 2005数据库中,存储过程可以使用T-SQL语言,或者是符合.NET规范的各种语言编写。SQL Server 2005中的存储过程和其他编程语言中的过程类似,主要有以下共性:
(1)接受输入参数、输出参数,向调用过程或批处理返回多个值。
(2)包含用于在数据库中执行操作的编程语句,如T-SQL语句或者其他语言。
(3)向调用过程或批处理返回状态值,指明过程执行的成功或失败。
用户可以使用T-SQL语言的EXECUTE语句来运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接在表达式中使用。
在SQL Server 2005数据库中,可以通过SQL Server Management Studio工具的“对象资源管理器”查看存储过程。在“对象资源管理器”的“数据库”目录下,“可编程性”目录下,“存储过程”目录下查看到该数据库的所有存储过程。该目录显示的存储过程包括“系统存储过程”和“用户存储过程”。“系统存储过程”是数据库在创建时建立的,数据库系统使用的存储过程。
例如AdventureWorks示例数据库的uspUpdateEmployeePersonalInfo存储过程,用来使用所指定
EmployeeID的输入参数中指定的值来更新员工数据表。在这里该示例给读者一个感性的认识,存储过程将在第10章进行详细的说明。uspUpdateEmployeePersonalInfo存储过程的代码如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [HumanResources].[uspUpdateEmployeePersonalInfo]
@EmployeeID [int],
@NationalIDNumber [nvarchar](15),
@BirthDate [datetime],
@MaritalStatus [nchar](1),
@Gender [nchar](1)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON;
27·28·
BEGIN TRY
UPDATE [HumanResources].[Employee]
SET [NationalIDNumber] = @NationalIDNumber
,[BirthDate] = @BirthDate
,[MaritalStatus] = @MaritalStatus
,[Gender] = @Gender
WHERE [EmployeeID] = @EmployeeID;
END TRY
BEGIN CATCH
EXECUTE [dbo].[uspLogError];
END CATCH;
END;
代码说明:
2023年6月21日发(作者:)
·22·
第3章 SQL Server数据库基础综述
SQL Server数据库具有关系型数据库的所有特征,和许多主流数据库产品相同,目的都是为了方便、有效地存取数据,对数据进行有效的维护管理等。数据库之所以流行,在企业运营、信息管理等扮演着越来越重要的角色,是因为其已经形成了完善的理论,并为数据管理提供了系统的科学支持。因此理解数据库的基础知识,有助于更好的操作和使用数据库。本章重点介绍数据库的基本概念,并结合SQL
Server数据库对这些概念进行讲解,方便读者的理解和应用。
3.1 数据库基本概念
数据库管理技术经过长期的发展,已经形成了系统的科学理论,本节就数据库知识的基本概念做一简单介绍,使读者了解数据库的基本内容、数据库的理论框架。
3.1.1 数据与信息
数据(Data)是描述事物的符号记录,它具有多种表现形式,可以是文字、图形、图像、声音、语言等。SQL Server 2005数据库就是存储管理这样的记录的计算机系统。增强的功能使得SQL Server 2005数据库能够更加方便的管理声音、图像等数据,并可以对文字进行全文搜索。
信息具有可感知、可存储、可加工、可传递和可再生等自然属性,信息已是社会各行各业不可缺少的资源,这是信息的社会属性。数据是经过组织的比特的集合,而信息是具有特定释义和意义的数据。
3.1.2 数据库
数据库(Database,DB)是指长期储存在计算机内的、有组织的、可共享的数据集合。数据中的数据按一定的数学模型组织、描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。
3.1.3 数据库系统
数据库系统(Database System,DBS)广义上讲是由数据库、硬件、软件和人员组成,其中管理的对象是数据。数据是经过组织的比特的集合,而信息是具有特定释义和意义的数据。例如:一个生产型企业的数据库系统,广义上可能包括“生产数据集合”、“SQL Server 2005数据库软件系统”、“数据库服务器等硬件”和“数据管理和设计人员”。
3.1.4 数据库管理系统(DBMS)
数据库管理系统(Database Management System),DBMS是位于用户与操作系统之间的一层数据管
22 ·23·理软件,是数据库系统的核心,在操作系统的支持下,解决如何科学的组织和储存数据,如何高效的获取和维护数据库的系统软件。其主要功能包括数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护。数据库管理系统可以分为层次型、网状型、关系型、面向对象型DBMS。
SQL Server 2005就是这样的数据库管理系统,SQL Server 支持关系型数据库模型,并对传统的数据库管理系统有了许多新的扩展。
3.2 数据库管理系统的基本功能
数据库管理系统主要是实现对共享数据有效组织、管理和存取,因此应具有系统的管理和维护的功能,其中最基本的功能有以下五种。其中数据定义语言和数据操纵语言对于初学者最为常用,会在后面的章节中进行详细的介绍。
3.2.1 定义数据
数据定义,数据库管理系统提供定义数据类型和数据存储形式的功能。每个记录的每个字段中的信息为一个数据。因记录的信息不同,其数据类型也应不同。通过定义数据类型,可以在一定程度上保证数据的完整性。
数据库管理系统提供数据定义语言(data definition language,DDL),用户可以对数据库的结构描述定义,包括数据库的完整性、安全保密定义,如口令、级别、存取权限等。这些定义存储在数据字典中,是数据库管理系统基本依据,如后面讲述的CREATE、DROP等语句均属于该类型。
3.2.2 处理数据
数据操作,数据库管理系统提供多种处理数据的方式,一般采用数据操纵语言(data manipulation
language,DML),实现对数据库中数据的基本操作,如检索、插入、修改和删除。例如,经常使用“SELECT”语句在一张表中查找信息,在几个相关的表或文件中进行复合的查找;使用“UPDATE”语句使用相应的命令更新一个字段或多个记录的内容;用一个命令对数据进行统计,甚至可以使用数据库管理系统工具进行编程,以实现更加复杂的功能。
DML分为两类:宿主型和自含型。所谓宿主型是指将DML语句嵌入某种主语言(如C、COBOL等)中使用;自含型是指可以单使用DML语句,供用户交互使用。
在SQL Server 2005数据库中,微软公司对这两种方式进行支持和扩展。即可以通过SQL Server
Management Studio工具,编写TSQL的DML语句操作数据,也可以使用第三方语言,操作数据,进行程序开发。
3.2.3 数据库运行管理
数据控制,数据库管理系统对数据提供一定的保护措施,即在运行期间,多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等是数据库管理系统的重要组成部分。
在保证在多个用户共享数据时,只有被授权的用户才能查看或修改数据,以保证数据的安全性。即
23·24·
根据用户的职责,不同级别的人对数据库具有不同的权限,数据库管理系统应该确保数据的安全性。
3.2.4 数据组织、存储和管理
数据库管理系统分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等等;要确定以何种文件结构和存取方式在存储级上组织这些数据,以提高存取效率。实现数据间的联系、数据组织和存储的基本目标,是提高存储空间利用率。
3.2.5 数据库的建立和维护
数据库的建立和维护,包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构、性能监测和分析等。
3.3 数据库的类型
数据库技术发展阶段的划分应该以数据模型的发展演变作为主要依据和标志。总体说来,数据库技术从开始到现在一共经历了三个发展阶段:第一代是网状、层次数据库系统,第二代是关系数据库系统,第三代是以面向对象数据模型为主要特征的数据库系统。SQL Server 2005数据库是以关系数据模型为基础的数据库,同时增加了许多下一代数据库系统的新特性。
3.3.1 层次型数据库
层次型数据库管理系统是紧随网状数据库而出现的。现实世界中很多事物是按层次组织起来的。层次数据模型的提出,首先是为了模拟这种按层次组织起来的事物。层次数据库也是按记录来存取数据的。
层次数据模型中最基本的数据关系是基本层次关系,它代表两个记录型之间一对多的关系,即双亲子女关系。数据库中有且仅有一个记录型无双亲,称为根节点。其他记录型有且仅有一个双亲。在层次模型中从一个节点到其双亲的映射是惟一的,所以对每一个记录型(除根节点外)只需要指出它的双亲,就可以表示出层次模型的整体结构。
3.3.2 网络型数据库
网状数据库。第一代包括网状和层次数据库系统,是因为它们的数据模型虽然分别为层次和网状模型,但实质上层次模型只是网状模型的特例而已。这二者都是格式化数据模型,都是在60年代后期研究和开发的,不论是体系结构、数据库语言,还是数据的存储管理,都具有共同特征,所以它们应该划分为一代。
3.3.3 关系型数据库
第二代数据库系统支持关系数据模型。关系模型不仅具有简单、清晰的优点,而且有关系代数作为语言模型,有关系数据理论作为理论基础。因此关系数据库具有形式基础好、数据独立性强、数据库语
24 ·25·言非过程化等特点。现在的主流数据库如SQL Server、Oracle、MySQL都满足关系数据模型。
3.4 SQL Server的数据库对象
一个数据库往往由多种数据对象构成,SQL Server数据库的数据元素包括数据表、视图、索引等,本节就这些数据对象进行介绍,并结合案例数据库进行说明。这些数据对象的维护、管理的具体使用,将在后面的章节详细介绍。
3.4.1 表(Table)
数据表,这里简称“表”,是包含数据库中所有数据的数据库对象。表定义为一个列集合。数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的。每一行代表一条唯一的记录,每一列代表记录中的一个字段。
在SQL Server 2005数据库中,表是数据最原始的存储位置。用户可以在SQL Server Management
Studio工具的“对象资源管理器”中查看到“表”目录。该目录下显示数据库中的所有数据表。例如,在AdventureWorks示例数据库中,包含公司雇员数据的表中,每一行记录代表一名雇员,各列分别代表该雇员的信息,如雇员编号、姓名、地址、职位以及家庭电话号码等。用户可以通过以下步骤查看SQL
Server 2005数据库中的数据表。
(1)单击“开始|所有程序|Microsoft SQL Server 2005|SQL Server Management Studio”菜单命令,启动SQL Server Management Studio工具。
(2)在“对象资源管理器”中,连接到SQL Server 2005数据库引擎实例,再展开该实例。
(3)图3.1显示了在AdventureWorks示例数据库中的“表”目录。一个数据库可由多个数据表构成。
(4)右击该表,选择“打开表”菜单命令,图3.2显示了AdventureWorks示例数据库中,打开ment表的结果。
图3.1 查看SQL Server 数据库的数据表 图3.2 查看AdventureWorks数据库的Department数据表
25·26·
3.4.2 视图(View)
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图在数据库中并不是直接存储为物理数据,而是“引用”了数据表中的数据。除非是SQL Server 2005数据库中物化的索引视图(在后面的章节会讲述该视图)。
视图的行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。
在SQL Server中分布式查询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储单位在不同地区的数据,而用户需要将这些服务器上结构相似的数据组合起来,这种方式就很有用。通过视图进行查询没有任何限制,通过它们也可以进行数据修改。
对于SQL Server 2005数据库,参考3.4.1节启动SQL Server Management Studio工具,在“对象资源管理器”中,可以浏览到“视图”目录,如图3.3所示。可以看到,包括了系统视图和用户定义视图。
图3.3 查看SQL Server 数据库的视图
3.4.3 索引(Index)
数据库中的索引,帮助用户快速查找表或索引视图中的指定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。
索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一种数据结构(B树)中,使SQL Server可以快速有效地查找与键值关联的行。
SQL Server 2005数据库提供了丰富的索引类型,主要包括聚集索引、非聚集索引、唯一索引、包含性索引等,还提供了索引视图、全文、XML等高级索引,这些索引的具体使用,请参考第15章。
26 ·27·3.4.4 主键(Primary Key)
数据表中一般都包括这样的一列或者一组列,它用于唯一标识表中每一行,这样的一列或多列称为表的主键,它用于强制数据表的实体完整性。在创建或修改表时,用户可以通过定义主键约束来创建主键。一个表只能有一个主键约束,并且主键约束中的列不能接受空值。由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。
3.4.5 外键(Foreign Key)
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键做主关键字的表被称为主表,具有此外键的表被称为主表的从表,外键又称作外关键字。
3.4.6 存储过程(Stored Procedure)
存储过程是由流控制语句和SQL语句编写的一组代码,存储过程经编译和优化后,存储在数据库服务器中,使用时只要调用即可运行。
在SQL Server 2005数据库中,存储过程可以使用T-SQL语言,或者是符合.NET规范的各种语言编写。SQL Server 2005中的存储过程和其他编程语言中的过程类似,主要有以下共性:
(1)接受输入参数、输出参数,向调用过程或批处理返回多个值。
(2)包含用于在数据库中执行操作的编程语句,如T-SQL语句或者其他语言。
(3)向调用过程或批处理返回状态值,指明过程执行的成功或失败。
用户可以使用T-SQL语言的EXECUTE语句来运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接在表达式中使用。
在SQL Server 2005数据库中,可以通过SQL Server Management Studio工具的“对象资源管理器”查看存储过程。在“对象资源管理器”的“数据库”目录下,“可编程性”目录下,“存储过程”目录下查看到该数据库的所有存储过程。该目录显示的存储过程包括“系统存储过程”和“用户存储过程”。“系统存储过程”是数据库在创建时建立的,数据库系统使用的存储过程。
例如AdventureWorks示例数据库的uspUpdateEmployeePersonalInfo存储过程,用来使用所指定
EmployeeID的输入参数中指定的值来更新员工数据表。在这里该示例给读者一个感性的认识,存储过程将在第10章进行详细的说明。uspUpdateEmployeePersonalInfo存储过程的代码如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [HumanResources].[uspUpdateEmployeePersonalInfo]
@EmployeeID [int],
@NationalIDNumber [nvarchar](15),
@BirthDate [datetime],
@MaritalStatus [nchar](1),
@Gender [nchar](1)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON;
27·28·
BEGIN TRY
UPDATE [HumanResources].[Employee]
SET [NationalIDNumber] = @NationalIDNumber
,[BirthDate] = @BirthDate
,[MaritalStatus] = @MaritalStatus
,[Gender] = @Gender
WHERE [EmployeeID] = @EmployeeID;
END TRY
BEGIN CATCH
EXECUTE [dbo].[uspLogError];
END CATCH;
END;
代码说明:
发布评论