SQL Server实用教程(SQL Server 2008版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 SQL Server数据库基本概念

对SQL Server的数据库有两种观点,即用户观点和数据库管理员观点。观点不同,对数据库的看法也不同。

2.1.1 逻辑数据库

SQL Server数据库是存储数据的容器,是一个由存放数据的表和支持这些数据的存储、检索、安全性和完整性的逻辑成分所组成的集合。用户观点将数据库称为逻辑数据库,组成数据库的逻辑成分称为数据库对象。SQL Server 2008的数据库对象主要包括表、视图、索引、存储过程、触发器和约束等。

用户经常需要在T-SQL中引用SQL Server对象并对其进行操作,如对数据库表进行查询和数据更新等,在其所使用的T-SQL语句中需要给出对象的名称。用户可以给出两种对象名,即完全限定名和部分限定名。

(1)完全限定名。在SQL Server 2008中,完全限定名是对象的全名,包括4个部分:服务器名、数据库名、数据库架构名和对象名,其格式为

        server.database.scheme.object

在SQL Server 2008上创建的每一个对象都必须有一个唯一的完全限定名。

说明:在SQL Server 2000中,用户和架构的概念是相同的;而在SQL Server 2005及之后的版本中,用户和架构已经明确地分离了开来。从SQL Server 2005开始,每个对象都属于一个数据库架构。数据库架构是一个独立于数据库用户的非重复命名空间。一般可以将架构视为对象的容器。可以在数据库中创建和更改架构,并且可以授予用户访问架构的权限。任何用户都可以拥有架构,并且架构所有权可以转移。一个架构只能有一个所有者,所有者可以是用户、数据库角色或应用程序角色。同一个用户可以被授权访问多个架构。多个数据库用户可以共享单个默认架构。由于架构与用户独立,故删除用户不会删除架构中的对象。

(2)部分限定名。在使用T-SQL编程时,使用全名往往很烦琐且没有必要,所以常省略全名中的某些部分,对象全名的4个部分中的前3个部分均可以省略,当省略中间的部分时,圆点符“.”不可省略。把只包含对象完全限定名中的一部分的对象名称为部分限定名。当用户使用对象的部分限定名时,SQL Server可以根据系统的当前工作环境确定对象名称中省略的部分。

在部分限定名中,未指出的部分使用以下默认值。

服务器:默认为本地服务器。

数据库:默认为当前数据库。

数据库架构名:默认为dbo。

例如,以下是一些正确的对象部分限定名:

        server.database...object             /*省略架构名*/
        server.. scheme.object             /*省略数据库名*/
        database. scheme.object            /*省略服务器名*/
        server…object                  /*省略架构名和数据库名*/
        scheme.object                   /*省略服务器名和数据库名*/
        object                        /*省略服务器名、数据库名和架构名*/

说明:用户所使用的SQL Server对象名是逻辑名,其命名遵循T-SQL常规标识符命名规则,最长为30个字符,且区分大小写。

下面大致介绍一下SQL Server 2008中所包含的常用数据库对象,有关数据库对象的具体内容将在后面的章节中一一介绍。

① 表:表是SQL Server中最主要的数据库对象,它是用来存储和操作数据的一种逻辑结构。表由行和列组成,因此也称为二维表。表是在日常工作和生活中经常使用的一种表示数据及其关系的形式。

② 视图:视图是从一个或多个基本表中引出的表。数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

由于视图本身并不存储实际数据,因此也可以称之为虚表。视图中的数据来自定义视图的查询所引用的基本表,并在引用时动态生成数据。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。视图一经定义,就可以像基本表一样被查询、修改、删除和更新了。

③ 索引:索引是一种不用扫描整个数据表就可以对表中的数据实现快速访问的途径,它是对数据表中的一列或者多列数据进行排序的一种结构。

表中的记录通常按其输入的时间顺序存放,这种顺序称为记录的物理顺序。为了实现对表记录的快速查询,可以对表的记录按某个或某些属性进行排序,这种顺序称为逻辑顺序。

索引是根据索引表达式的值进行逻辑排序的一组指针,它可以实现对数据的快速访问,索引是关系数据库的内部实现技术,它被存放在存储文件中。

④ 约束:约束机制保障了SQL Server 2008中数据的一致性与完整性,具有代表性的约束就是主键和外键。主键约束当前表记录的唯一性,外键约束当前表记录与其他表的关系。

⑤ 存储过程:存储过程是一组为了完成特定功能的SQL语句集合。这个语句集合经过编译后存储在数据库中,存储过程具有接受参数、输出参数、返回单个或多个结果以及返回值的功能。存储过程独立于表存在。

存储过程有与函数类似的地方,但它又不同于函数,例如,它不返回取代其名称的值,也不能直接在表达式中使用。

① 触发器:触发器与表紧密关联。它可以实现更加复杂的数据操作,更加有效地保障数据库系统中数据的完整性和一致性。触发器基于一个表创建,但可以对多个表进行操作。

② 默认值:默认值是在用户没有给出具体数据时,系统所自动生成的数值。它是SQL Server 2008系统确保数据一致性和完整性的方法。

③ 用户和角色:用户是指对数据库有存取权限的使用者;角色是指一组数据库用户的集合。这两个概念类似于Windows XP的本地用户和组的概念。

④ 规则:规则用来限制表字段的数据范围。

⑤ 类型:用户可以根据需要在给定的系统类型之上定义自己的数据类型。

⑥ 函数:用户可以根据需要在SQL Server 2008上定义自己的函数。

2.1.2 物理数据库

从数据库管理员观点看,数据库是存储逻辑数据库的各种对象的实体。这种观点将数据库称为物理数据库。SQL Server 2008的物理数据库构架主要内容包括文件及文件组,还有页和盘区等,它们描述了SQL Server 2008如何为数据库分配空间。在创建数据库时,了解SQL Server 2008如何存储数据也是很重要的,这有助于规划分配给数据库的磁盘容量。

1.页和区

SQL Server 2008中有两个主要的数据存储单位:页和区。

页是SQL Server 2008中用于数据存储的最基本单位。每个页的大小是8 KB,也就是说, SQL Server 2008中每1 MB的数据文件可以容纳128页。每页的开头是96 B的标头,用于存储有关页的系统信息。紧接着标头存放的是数据行,数据行按顺序排列。数据库表中的每一行数据都不能跨页存储,即表中的每一行数据字节数不能超过8192。页的末尾是行偏移表,页中的每一行在偏移表中都有一个对应的条目。每个条目记录着对应行的第一个字节与页首部的距离。

区是用于管理空间的基本单位。每8个连接的页组成一个区,大小为64 KB,即每1 MB的数据库就有16个区。区用于控制表和索引的存储。

2.数据库文件

SQL Server 2008所使用的文件包括以下三类文件。

(1)主数据文件。主数据文件简称主文件,正如其名字所示,该文件是数据库的关键文件,包含了数据库的启动信息,并且存储数据。每个数据库必须有且仅能有一个主文件,其默认扩展名为.mdf。

(2)辅助数据文件。辅助数据文件简称辅(助)文件,用于存储未包括在主文件内的其他数据。辅助文件的默认扩展名为.ndf。辅助文件是可选的,根据具体情况,可以创建多个辅助文件,也可以不使用辅助文件。一般当数据库很大时,有可能需要创建多个辅助文件。而当数据库较小时,则只需要创建主文件而不需要创建辅助文件。

(3)日志文件。日志文件用于保存恢复数据库所需的事务日志信息。每个数据库至少有一个日志文件,也可以有多个,日志文件的扩展名为.ldf。日志文件的存储与数据文件不同,它包含一系列记录,这些记录的存储不以页为存储单位。

说明:SQL Server 2008允许在创建数据库时不使用上述的.mdf、.ndf和.ldf做文件扩展名,但使用默认的扩展名有助于识别文件。

在创建一个数据库后,该数据库至少包含上述的主文件和日志文件。这些文件的名字是操作系统文件名,它们不是由用户直接使用的,而是由系统使用的,不同于数据库的逻辑名。

3.文件组

文件组是由多个文件组成的,为了管理和分配数据而将它们组织在一起。通常可以为一个磁盘驱动器创建一个文件组,然后将特定的表、索引等与该文件组相关联,那么对这些表的存储、查询和修改等操作都在该文件组中。

使用文件组可以提高表中数据的查询性能。在SQL Server 2008中有两类文件组。

(1)主文件组。主文件组包含主要数据文件和任何没有明确指派给其他文件组的其他文件。管理数据库的系统表的所有页均分配在主文件组中。

(2)用户定义文件组。用户定义文件组是指在CREATE DATABASE或ALTER DATABASE语句中使用FILEGROUP关键字指定的文件组。

每个数据库中都有一个文件组作为默认文件组运行。若在SQL Server 2008中创建表或索引时没有为其指定文件组,那么将从默认文件组中进行存储页分配、查询等操作。用户可以指定默认文件组,如果没有指定默认文件组,则主文件组是默认文件组。

注意:若不指定用户定义文件组,则所有数据文件都包含在主文件组中。

在设计文件和文件组时,一个文件只能属于一个文件组。只有数据文件才能作为文件组的成员,日志文件不能作为文件组成员。

2.1.3 系统数据库和用户数据库

在SQL Server 2008中有两类数据库:系统数据库和用户数据库。

系统数据库存储有关SQL Server的系统信息,它们是SQL Server 2008管理数据库的依据。如果系统数据库遭到破坏,那么SQL Server将不能正常启动。在安装SQL Server 2008时,系统将创建4个可见的系统数据库:master、model、msdb和tempdb。

(1)master数据库包含了SQL Server 2008的登录账号、系统配置、数据库位置及数据库错误信息等,控制用户数据库和SQL Server的运行。

(2)model数据库为新创建的数据库提供模板。

(3)msdb数据库为“SQL Server代理”调度信息和作业记录提供存储空间。

(4)tempdb数据库为临时表和临时存储过程提供存储空间,所有与系统连接的用户的临时表和临时存储过程都存储于该数据库中。

每个系统数据库都包含主数据文件和主日志文件。扩展名分别为.mdf和.ldf,例如master数据库的两个文件分别为master.mdf和master.ldf。

用户数据库是用户创建的数据库。两类数据库结构相同,文件的扩展名也相同。本书中创建的都是用户数据库。