SQL Server 2016 数据库教程(第4版)
上QQ阅读APP看书,第一时间看更新

2.1 SQL Server数据库

对于SQL Server数据库,从使用数据库的角度来说,它是一个逻辑数据库,只需要知道如何操作它就可以。从数据库保存角度来说,它是物理数据库,需要关心包含哪些文件、文件大小、存放位置等。

2.1.1 逻辑数据库

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

1. 数据库对象

数据库是一个容器,主要存放数据库对象。下面先简单介绍一下SQL Server中所包含的常用数据库对象。

• 表:表是最主要的数据库对象。表由行和列组成,因此也称为二维表。表是存放数据及表示关系的主要形式。

例如,对于学生成绩管理系统,学生信息、课程信息和成绩信息分别存放在学生表、课程表和成绩表中。

• 视图:视图是从一个或多个基本表中引用表。由于视图本身并不存储实际数据,因此也可以称之为虚表。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。

例如,对于成绩表,我们不能直接看出学生姓名、课程名称等比较直观的信息,所以,我们可以定义一个学生课程成绩视图,将学生表、课程表与成绩表关联起来,生成一个包含学号、姓名、课程号、课程名和成绩的虚表,打开这个表就能看到这些字段在一起的一个表了。

同时,视图一经定义,就可以像基本表一样被查询、修改、删除和更新了。修改、删除和更新的内容会反映到基本表中。

• 索引:表中的记录通常按其输入的时间顺序存放,这种顺序称为记录的物理顺序。为了实现对表记录的快速查询,可以对表的记录按某个或某些字段或它们的组合(称为索引表达式)进行排序,这种顺序称为逻辑顺序。通过逻辑顺序搜索索引表达式的值,可以实现对该类数据记录的快速访问。

例如,在学生表中,对学号字段进行索引,这样按学号进行查找对应学生信息记录时很快就可进行定位。将学号字段指定为“主键”,在学生表中就不可能存放相同学号的学生记录。

• 约束:约束用于保障数据的一致性与完整性。具有代表性的约束就是主键和外键。主键约束当前表记录的主键字段值唯一性,外键约束当前表记录与其他表的关系。

例如,在成绩表中,学号作为外键与学生表中学号(主键)建立关联,以使成绩对应相应的学生。

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

例如,在学生数据库中,编写若干条T-SQL语句计算总学分作为存储过程,可以汇总成绩表相应学生的总学分,然后放到学生表相应的学生总学分字段中。学号作为输入参数时,计算指定学生的总学分;输入参数为空时,则计算所有学生的总学分。

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

例如,在学生表中没有学生时,成绩表的成绩不能输入。

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

例如,在学生表中,学号默认值设置为初始学号,这样增加记录时系统预置了一个初始学号,用户只要修改后面两位,而不需要输入所有号。又例如,设置性别默认值为男,这样增加记录时只有女学生才需要修改性别字段内容。

• 用户和角色:用户是指对数据库有存取权限的使用者,角色是指一组数据库用户的集合。

• 规则:规则用来限制表字段的数据范围。例如,在学生表中,将出生时间字段设置为当前日期前的16~65年。

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

例如,可以定义系统的逻辑类型为性别类型,这样我们处理性别数据时可以采用性别类型。

• 函数:用户可以根据需要将系统若干个语句或者系统函数进行组合实现特定功能,定义成自己的函数。然后,在需要该功能处调用该函数。

2. 数据库对象的引用

用户通过数据库对象对其进行操作,数据库对象有两种对象名,即完全限定名和部分限定名。

(1)完全限定名。在SQL Server中,完全限定名是对象的全名,包括4个部分:

  服务器名.数据库名.数据库架构名.对象名

在SQL Server中,每个对象都属于一个数据库架构。数据库架构是一个独立于数据库用户的非重复命名空间。一般可以将架构视为对象的容器。

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

3. 数据库中的架构

简单地说,架构的作用是将数据库中的所有对象分成不同的集合,每一个集合就称为一个架构。数据库中的每一个用户都会有自己的默认架构。这个默认架构可以在创建数据库用户时由创建者设定,若不设定则系统默认架构为dbo。数据库用户只能对属于自己架构中的数据库对象执行相应的数据操作。至于操作的权限则由数据库角色决定。

2.1.2 物理数据库

从数据库管理员角度看,数据库是物理数据库,它存储逻辑数据库的各种对象的实体。在创建数据库时,了解SQL Server如何存储数据也是很重要的,这有助于规划分配给数据库的磁盘容量。

SQL Server所使用的文件包括以下3类文件,通过文件组管理和组织在一起。

1. 数据库文件

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

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

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

说明

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

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

2. 数据库文件组

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

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

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

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

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

说明

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

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

3. FILESTREAM

借助FILESTREAM,基于SQL Server的应用程序可以将非结构化的数据(如文档和图像)存储在文件系统中。应用程序在利用丰富的流式API和文件系统性能的同时,还可保持非结构化数据和对应的结构化数据之间的事务一致性。

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

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

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

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

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

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

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

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

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

2.1.4 连接SQL Server服务器

1. 连接SQL Server服务器

连接服务器

启动“Microsoft SQL Server”,系统首先连接SQL Server服务器,如图2.1所示。

图2.1 “连接到服务器”对话框

• 服务器类型:可选择的有数据库引擎、Analysis Services(分析服务)、报表服务(Reporting Services)、Integration Services(集成服务)。其中,数据库引擎是SQL Server基本功能,一般用户仅仅需要使用该功能,默认的选择类型为数据库引擎类型。

• 服务器名称:格式为“计算机名/实例名”,如果在安装时使用的是默认实例,则使用计算机名作为服务器名称。当然,使用计算机的IP地址也可以。

如果连接非本机,则选择<浏览更多多…>,系统列出当前局域网上运行的SQL Server服务器的主机名,供选择。

• 身份验证:因为在安装SQL Server 2016时选择“混合模式(SQL Server身份验证和Windows身份验证)”,所以可选择Windows身份验证或者SQL Server身份验证。

选择Windows身份验证,采用登录Windows的用户连接SQL Server服务器。Windows系统管理员为“Adminstrator”。此时的用户名为<主机名>\<Windows用户名>。

选择SQL Server身份验证,采用SQL Server系统管理员(sa)和安装时指定的密码登录,如图2.2所示。用户也可以采用SQL Server中的注册用户及其对应密码登录。

图2.2 SQL Server身份验证

在Windows采用域模式情况下,还有3种活动目录(Active Directory)验证方式。

单击“连接”,系统进入“SQL Server Management Studio”(简称SSMS)窗口,并且默认打开对象资源管理器。系统进入“SQL Server Management Studio(管理员)”窗口,如图2.3和图2.4所示。

图2.3 SQL Server Management Studio(Windows登录)窗口

图2.4 SQL Server Management Studio(sa登录)窗口

其中,DELL(SQL Server 13.0.1742.0-sa)表示当前连接SQL Server服务器,具体表示如下。

DELL:服务器名称,该名称就是当前安装SQL Server 2016计算机的名称。

SQL Server 13.0.1742.0:SQL Server 2016数据库引擎版本。

DELL\Administrator:登录服务器的是当前(DELL)计算机Windows下的Administrator用户。

2. SSMS环境配置

需要了解对于SSMS环境参数,可在“SSMS”窗口中单击“工具”主菜单,选择“选项”子菜单,系统显示“选项”对话框,如图2.5所示。

图2.5 SSMS环境配置

一般用户不需要特别了解每一项内容的意义,也不需要深究其中的配置。

3. SQL Server 2016服务器属性

在“SSMS”窗口中,选择DELL(SQL Server 13.0.1742.0-sa)连接,按右键,单击“服务器属性”,可以查看当前连接的SQL Server 2016服务器的属性,包含了若干个选择页。

(1)“常规“页,如图2.6所示。

其中显示服务器名称、安装的SQL Server 2016企业版、数据库引擎版本、安装的目录等。

(2)在“数据库设置”页包含了数据库文件默认位置,系统显示默认路径,该路径是安装SQL Server 2016时“数据库引擎”指定的数据文件路径,用户可以在这里进行修改。

(3)单击左下角“查看连接属性”,系统显示“连接属性”窗口。

图2.6 “常规”页