数据库技术丛书erver从入门到实战视频教学版一品堂技术学习笔记

SQL Server2016从入门到实战 PDF 下载

本书详细讲解了SQLServer2016数据库的基本概念、安装和卸载、创建数据库、操作数据表和视图、T-SQL语言、数据查询、数据操作、存储过程、触发器、索引、游标、SQL函数、事务、性能优化等内容,还讲解了大数据功能和数据库性能提升问题。读者通过本书的学习可以较为全面地掌握SQLServer 2016数据库管理、开发的方法和技巧。

作者:孙亚南孙亚南,多年数据库研发与教学经验。

数据库是依照某种数据模型组织起来并存放在二级存储器中的数据集合, 可以将其视为电子化的文件柜。数据库具有不重复、以最优方式提供多种应用服务、数据结构独立于应用程序、对数据的操作由统一软件进行管理和控制等特点。从数据管理技术的发展历程来看, 数据库是由文件管理系统发展起来的, 是数据管理的高级阶段。本章重点内容:• 了解数据库的发展与组成• 掌握数据库体系结构• 掌握数据库的数据模型• 了解常见的数据库

数据库(DataBase , DB ) 是按照数据结构来组织、存储和管理数据的仓库, 产生于距今60 多年前. 随着信息技术和市场的发展,特别是20 世纪90 年代以后,数据管理不再仅仅用于存储和管理数据, 出现了用户所需要的各种数据管理的方式。从简单的存储各种数据的表格到能够进行海蓝数据存储的大型数据库系统都属于数据库的范畴, 并在各个方面得到了广泛的应用。      在信息化社会充分有效地管理和利用各类信息资源是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

使用计算机后,随着数据处理莹的增长,产生了数据管理技术。数据管理技术的发展与计算机硬件(主要是外部存储器〉、系统软件及计算机应用的范围有着密切的联系。数据管理技术的发展经历了4 个阶段:人工管理阶段、文件系统阶段、数据库阶段和高级数据库技术阶段。其中,数据库阶段和高级数据库技术阶段可以统称为系统阶段,即由数据库系统进行管理数据的阶段。

20 世纪50 年代中期之前, 计算机的软硬件均不完善。硬件存储设备只有磁带、卡片和纸带,软件方面还没有操作系统,当时的计算机主要用于科学计算。人工管理阶段由于还没有软件系统对数据进行管理,程序员在程序中不仅要规定数据的逻辑结构,还要设计其物理结构,包括存储结构、存取方法、输入输出方式等。当数据的物理组织或存储设备改变时,用户程序就必须重新编制。由于数据的组织面向应用, 不同的计算程序之间不能共享数据, 使得不同的应用之间存在大量的重复数据,很难维护应用程序之间数据的一致性。这一阶段的主要特征可归纳为如下几点:• 计算机中没有支持数据管理的软件.• 数据组织面向应用,数据不能共享,数据重复。• 在程序中要规定数据的逻辑结构和物理结构,数据与程序不独立.• 数据处理方式一--批处理。

这一阶段处于20 世纪50 年代中期到60 年代中期,其主要标志是计算机中有了专门管理数据库的软件一←操作系统。操作系统文件管理功能的出现标志着数据管理步入一个新的阶段。在文件系统阶段,数据以文件为单位存储在外存,由操作系统统一管理,而操作系统为用户使用文件提供友好界面。该阶段中的文件逻辑结构与物理结构脱钩,程序和数据分离,使数据与程序有了一定的独立性。用户的程序与数据可分别存放在外存储器上,各个应用程序可以共享一组数据,实现了以文件为单位的数据共享。由于数据的组织仍然是面向程序的,因此仍存在大量的数据冗余。同时,由于数据的逻辑结构不能方便地修改和扩充,因此数据逻辑结构的每一点微小改变都会影响应用程序。此外,由于文件之间互相独立,因此不能反映现实世界中事物之间的联系,而操作系统不负责维护文件之间的联系信息。如果文件之间有内容上的联系,那么只能由应用程序去处理,这加大了程序设计人员的工作量。

20 世纪60 年代后,随着计算机在数据管理领域的普遍应用,人们对数据管理技术提出了更高的要求:希望面向企业或部门,以数据为中心组织数据,减少数据的冗余,提供更高的数据共享能力,同时要求程序和数据具有较高的独立性,当数据的逻辑结构改变时,不涉及数据的物理结构,也不影响应用程序,以降低应用程序研制与维护的费用。数据库技术正是在这样的应用需求基础上发展起来的。数据管理技术经历了人工管理阶段和文件阶段后,获得了大量的技术积累,这为数据库的诞生奠定了基础。具体来说,数据库技术有如下特点:(1)面向企业或部门。数据库以数据为中心进行数据的组织, 形成综合性的数据库,从而为各应用共享。(2) 采用一定的数据模型。数据模型不仅描述了数据本身的特点,而且描述了数据之间的联系。

(3)数据冗余小,易修改、易扩充。数据库技术阶段中,不同的应用程序根据处理要求从数据库中获取需要的数据, 这样就减少了数据的重复存储,也便于增加新的数据结构,便于维护数据的一致性。( 4) 程序和数据有较高的独立性。( 5 ) 具有良好的用户接口,用户可方便地开发和使用数据库。( 6 ) 对数据进行统一管理和控制,提供了数据的安全性、完整性以及并发控制。数据管理技术从文件系统发展到数据库系统,这在信息领域中具有里程碑的意义。在文件系统阶段,人们在信息处理中关注的中心问题是系统功能的设计,因此程序设计占主导地位;而在数据库阶段,数据开始占据了中心位置, 数据的结构设计成为信息系统首先关心的问题,而应用程序则以既定的数据结构为基础进行设计。

随着信息管理内容的不断扩展, 出现了丰富多样的数据模型(层次模型、网状模型、关系模型、面向对象模型、半结构化模型等) ,新技术也层出不穷(数据流、Web 数据管理、数据挖掘等)。每隔几年, 国际上一些资深的数据库专家就会聚集一堂,探讨数据库现状、研究存在的问题和未来需要关注的新技术焦点。数据库与学科技术的结合将会建立一系列新数据库,如分布式数据库、并行数据库、知识库、多媒体数据库等,这将是数据库技术重要的发展方向。未来数据库技术及市场发展的两大方向是数据仓库和电子商务,数据管理技术将在数据仓库技术以及与之相关的数据挖掘和知识发现领域持续发展。

数据库系统( Database System, DBS ) 是指一个具体的数据库管理系统软件和用它建立起来的数据库,通常由系统软件、数据库和数据管理员组成。系统软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统( DBMS ) ;数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行;数据管理员( DBA ) 负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用,数据库管理员一般由业务水平较高、资历较深的人员担任。数据库系统是软件研究领域的一个重要分支,常称为数据库领域。数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构, 具体来说由如下部分组成。(1)数据库:长期存储在计算机内,有组织、可共享的数据集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余、较高的数据独立性和易扩展性, 并可为各种用户共享。(2) 硬件:构成计算机系统的各种物理设备,包括存储所需的外部设备,如物理硬盘、光盘等媒介。

(3)系统软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统( DataBaseManagement Sys能m , DBMS ) 是数据库系统的核心软件,在操作系统的支持下工作,是科学地组织和存储数据、高效获取和维护数据的系统软件。其主要功能包括数据定义、数据操纵、数据库的运行管理和数据库的建立与维护。(4) 人员:主要包括如下4 类。• 第一类为系统分析员和数据库设计人员。系统分析员负责应用系统的需求分析和规范说明,他们和用户及数据库管理员一起确定系统的硬件配直,并参与数据库系统的概要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计.• 第二类为应用程序员,负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改.• 第三类为最终用户,他们利用系统的接口或查询语言访问数据库。• 第四类是数据库管理员( Data Base Administrator, DBA) ,负责数据库的总体信息控制。DBA 的具体职责包括确定数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能.

人们为数据库设计了一个严谨的体系结构, 数据库领域公认的标准结构是三级模式结构,包括外模式、概念模式和内模式。数据库体系结构能够有效组织、管理数据,提高数据库的逻辑独立性和物理独立性。

虽然实际的数据库管理系统产品种类很多,支持不同的数据模式,使用不同的数据库语言,建立在不同的操作系统之上,数据的存储结构也各不相同, 但它们在体系结构上通常具有相同的特征, 即采用三级模式结构并提供两级映像功能。模式是数据库中全体数据的逻辑结构和特征的描述, 仅仅涉及型的描述, 不涉及具体的值。模式的一个具体值称为一个实例,同一个模式可以有很多实例。模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。

美国国家标准协会(Arnerican National Standard Institute. ANSI)的数据库管理系统研究小组于1978 年提出了标准化的建议,将数据库结构分为3 级: 面向用户或应用程序员的用户级、面向建立和维护数据库人员的概念级、面向系统程序员的物理级。    其中, 用户级对应外模式, 概念级对应概念模式, 物理级对应内模式,不同级别的用户对数据库形成不同的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数据库在用户眼中的反映。很显然,不同层次(级别〉的用户所看到的数据库是不同的。数据库系统结构层次如图1.1所示。

1. 分类(1)外模式外模式又称子模式或用户模式, 对应用户级。它是某个或某几个用户所看到的数据库的数据视图, 是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应用户的数据记录(外模式) .也可以利用数据操纵语言( Data Manipulation Language. D~在L) 对这些数据记录进行操作。总的来说,外模式反映了数据库的用户观。

(2) 概念模式模式又称概念模式或逻辑模式,对应概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构, 是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language. DDL) 来描述、定义的,体现、反映了数据库系统的整体现。

(3)内模式内模式又称存储模式, 对应物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。在一个数据库系统中只有唯一的数据库,因而作为定义、描述数据库存储结构的内模式和定义、描述数据库逻辑结构的模式也是唯一的, 但建立在数据库系统之上的应用则是非常广泛、多样的, 所以对应的外模式不是唯一的,也不可能是唯一的。

2. 工作原理       数据库的三级模式是数据库在3 个级别(层次)上的抽象,使用户能够逻辑地、抽象地处理数据而不必关心数据在计算机中的物理表示和存储。实际上,对于一个数据库系统而言,物理级数据库是客观存在的,是进行数据库操作的基础;概念级数据库不过是物理数据库的一种逻辑、抽象的描述(模式) ;用户级数据库则是用户与数据库的接口,是概念级数据库的一个子集(外模式〉。       用户应用程序根据外模式进行数据操作,通过外模式一模式映射定义和建立某个外模式与模式间的对应关系,将外模式与模式联系起来,当模式发生改变时, 只要改变其映射,就可以使外模式保持不变,对应的应用程序也保持不变;另一方面,通过模式一内模式映射定义建立数据的逻辑结构(模式〉与存储结构(内模式)间的对应关系,当数据的存储结构发生变化时,只需改变模式一内模式映射,就能保持模式不变,因此应用程序也可以保持不变。

数据模型( Data Model ) 是数据特征的抽象,是数据库管理的教学形式框架,也是数据库系统中用以提供信息表示和操作手段的形式架构。数据模型包括数据库数据的结构部分、数据库数据的操作部分和数据库数据的约束条件。数据模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述。

数据模型所描述的内容包括3 部分:数据结构、数据操作和数据约束。(1)数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都基本建立在数据结构上。不同的数据结构具有不同的操作和约束。(2) 数据操作:数据模型中的数据操作主要描述在相应数据结构上的操作类型和操作方式。(3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、它们之间的制约和依存关系以及数据动态变化的规则,以保证数据的正确、有效和相容。

数据模型的研究包括以下3 方面:

这是面向数据库用户的现实世界的数据模型,主要用来描述世界的概念化结构,可以便数据库的设计人员在设计的初始阶段摆脱计算机系统及数据库管理系统的具体技术问题, 集中精力分析数据以及数据之间的联系等。概念数据模型与具体的数据库管理系统无关。需要注意的是,概念数据模型必须换成逻辑数据模型才能在数据库管理系统中实现。

这是用户在数据库中看到的数据模型,是具体的数据库管理系统所支持的数据模型,主要有网状数据模型、层次数据模型和关系数据模型3 种类型。此模型既要面向用户,又要面向系统,主要用于数据库管理系统的实现。

这是描述数据在存储介质上的组织结构的数据模型,不仅与具体的数据库管理系统有关,还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有与其相对应的物理数据模型。数据库管理系统为了保证其独立性与可移植性, 将大部分物理数据模型的实现工作交由系统自动完成,而设计者只设计索引、聚集等特殊结构。         数据库的类型是根据数据模型来划分的, 而任何一个DBMS 也是根据数据模型有针对性地设计出来的,这就意味着必须把数据库组织成符合DBMS 规定的数据模型。目前成熟地应用在数据库系统中的数据模型有层次模型、网状模型和关系模型。它们之间的根本区别在于数据之间联系的表示方式不同(记录型之间的联系方式不同)。层次模型以"树结构"表示数据之间的联系。网状模型以"图结构"来表示数据之间的联系。关系模型是用"二维表" (或称为关系)来表示数据之间的联系的。

E-R 方法是"实体.联系方法" (Entity-Relationship Approach) 的简称,是描述现实世界概念结构模型的有效方法。巴R 方法是表示概念模型的一种方式,用矩形表示实体型,在矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1 :1 、l:n 或m:n) 。用巳R 方法描述的数据模型即为E-R 模型,也称为E-R 图。图1.2 所示为一个简单学生管理系统的数据库E-R 模型图。

在E-R 图中,有如下4 个成分。• 矩形框:表示实体,在框中记入实体名.• 菱形框:表示联系,在框中记入联系名。• 椭圆形框:表示实体或联系的属性,将属性名记入框中.对于主属性名,则在其名称下加一下划线.• 连线:实体与属性之间、实体与联系之间、联系与属性之间用直线相连,并在直线上标注联系的类型。

构成E-R 图的基本要素是实体型、属性和联系,其表示方法如下。(1)实体型( Entity) : 有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体,在E-R 图中用矩形表示, 在矩形框内写明实体名。例如,学生张三丰、学生李寻欢都是实体。(2) 属性(Attribute) : 实体所具有的某一特性,一个实体可由若干个属性来刻画。属性在E-R 图中用椭圆形表示, 并用无向边将其与相应的实体连接起来。例如, 学生的姓名、学号、性别都是属性。如果是多值属性,就在椭圆形外面再套实线椭圆。如果是派生属性,就用虚线椭圆表示。(3)联系( Relationship) : 也称关系,用于在信息世界中反映实体内部或实体之间的联系。联系包括实体内的联系和实体间的联系两种, 实体内部的联系通常是指组成实体的各属性之间的联系, 实体之间的联系通常是指不同实体集之间的联系。联系在E-R 图中用菱形表示,在菱形框内写明联系名, 并用无向边分别与有关实体连接起来, 同时在无向边旁标上联系的类型(1 : 1 、1: n 或m :n) 。例如, 老师给学生授课存在授课关系, 学生选课存在选课关系。

需要注意的是,联系也可能有属性。例如,学生" 学"某门课程所取得的成绩,既不是学生的属性也不是课程的属性。由于"成绩"既依赖于某名特定的学生又依赖于某门特定的课程,因此它是学生与课程之间的联系"学"的属性。一般来说,联系可分为以下3 种类型:

例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对一的。

例如,某校教师与课程之间存在一对多的联系"教",即每个教师可以教多门课程,但是每门课程只能由一个教师来教。

例如,图1.2 表示学生与课程间的联系( "学" )是多对多的,即一个学生可以学多门课程,每门课程也可以有多个学生来学。

一般来说,用户在设计数据库之前需要先设计E-R 模型,而E-R 模型用E-R 图来表示,其设计分为3 个步骤:调查分析、合并生成和修改重构。(1)调查分析在需求分析阶段,通过对应用环境和要求进行详尽的调查分析,用多层数据流图和数据字典描述整个系统, 逐一设计分E-R 图每个局部应用对应的数据流图,同时将局部应用涉及的数据都收集在数据字典中。(2) 合并生成由于实体之间的联系在不同局部视图中呈现不同的类型,因此用户需要设计多个针对局部应用的E-R 图。合并生成步骤是将多个局部E-R 图的实体、属性和联系合并,从而生成整体的E-R 图。

(3)修改重构经合并生成后的基本E-R 图可能存在冗余的数据和冗余的实体间联系,即存在可由基本数据导出的数据和由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难。因此,得到基本E-R 图后,还应当进一步检查E-R 图中是否存在冗余,如果存在,应设法予以消除。修改重构步骤主要采用分析方法来消除基本E-R 图中的冗余,也可以用规范化理论来消除冗余。

当前数据库领域常用的数据模型主要有3 种:层次模型、网状模型和关系模型。其中,层次模型和网状模型统称非关系模型,如图1.3 所示。

现实世界中许多实体之间的联系本来就呈现出一种很自然的层次关系,如家族关系、军队编制、行政机构等,这就需要用层次结构来描述。层次模型是按照层次结构的形式组织数据库数据的数据模型,用树形结构来表示各类实体以及实体间的联系。层次模型是在数据结构中满足下面两个条件的基本层次联系的集合:• 有且饥有一个节点且没有双亲节点,这个节点称为根节点.• 除根节点之外的其他节点有且只有一个双亲节点。       在层次模型中,使用节点表示记录。记录之间的联系用节点之间的连线表示,这种联系是父子之间的一对多的实体联系。层次模型中的同一双亲的子女节点称为兄弟节点,没有子女节点的节点称为叶节点。层次模型示例如图1.4 所示。

层次模型像一棵倒立的树,只有一个根节点,有若干个叶节点,节点的双亲是唯一的。图1.5 是一个教学院系的数据结构, 图1.6 是教学院系数据库的一个实例,该层次数据结构中有4个记录。

层次模型的数据操作主要有查询、插入、删除和更新。需要注意的是,进行插入、删除、更新操作时要满足层次模型的完整性约束条件。层次模型必须满足的完整性约束条件如下:(1)在进行插入记录值操作时,如果没有指明相应的双亲记录值,就不能插入子女记录值。(2) 进行删除记录操作时,如果删除双亲记录值,相应的子女节点值也同时被删除。(3)进行修改记录操作时,应修改所有相应记录,以保证数据的一致性。

层次模型能够描述自然界的一些基本关系,是其他数据模型所不能代替的,其主要优点如下:• 层次模型的数据结构比较简单。• 对于实体间联系是固定的且预先定义好的应用系统,采用层次模型实现,其性能伏,于关系模型,不低于网状模型。• 层次数据模型提供了良好的完整性支持。

需要注意的是,层次模型中的任何一个给定的记录值只有按其路径查看时才能显示它的全部意义,没有一个子记录值能够脱离其双亲记录值而独立存在。因此,层次模型对具有一对多的层次关系的描述非常直观、自然、容易理解。同样地,由于层次模型是较为单一的模型,因此能描述的基本关系较少。该模型存在的主要缺点如下:(1)现实世界中很多联系是非层次性的,如多对多联系、一个节点具有多个双亲等。(2) 对插入和删除操作的限制比较多。(3)查询子节点必须通过双亲节点。( 4 ) 由于结构严密, 层次命令趋于程序化。层次模型表示这类联系的方法很不灵活,只能通过引入冗余数据(易产生不一致性)或创建非自然的数据组织来解决。

在现实世界中,事物之间的联系更多是非层次关系,用层次模型表示非树形结构很不直接,而网状模型则可以克服这一缺点。      网状数据模型的典型代表是DBTG 系统,这是20 世纪70 年代数据系统语言研究会CConference on Data System Language, CODASYL) 下属的数据库任务组C Data Base Task缸。up , DBTG) 提出的一个系统方案。DBTG 系统虽然不是实际的软件系统,但是它提出的基本概念、方法和技术具有普遍意义, 对于网状数据库系统的研制和发展起了重大的影响。后来许多系统都采用DBTG 模型或者简化的DBTG 模型,如CuUinetSo伽哑e 公司的IDMS 等。1. 网状模型的数据结构网状模型是指满足下面两个条件的基本层次联系的集合:• 有一个以上的节点没有双亲。• 节点可以有多于一个的双亲。如图1.7 所示, Ca) 、Cb) 和Cc) 图都是网状模型的示例。

网状模型是一种比层次模型更具普遍性的结构,去掉了层次模型的两个限制,允许多个节点没有双亲节点, 允许节点有多个双亲节点,此外还允许两个节点之间有多种联系。因此, 网状模型可以更直接地去描述现实世界,而层次模型实际上是网状模型的一个特例。

与层次模型一样,网状模型也使用记录和记录值表示实体集和实体, 每个节点也表示一个记录,每个记录可包含若干个字段。

2. 网状模型的数据操作与完整性约束

与层次模型相似,网状模型的数据操作主要包括查询、插入、删除和更新。进行插入操作时,允许插入尚未确定双亲节点值的子节点值。进行删除操作时,只允许删除双亲节点值。进行更新操作时,只需更新指定记录即可。因此,一般来说,网状模型没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统(如DBTG ) 对数据操作都加了一些限制,提供了一定的完整性约束。DBTG 在模式DDL 中提供了定义DBTG 数据库完整性的若干概念和语旬,主要有以下儿种。(1) 支持记录码的概念。码是唯一标识记录的数据项的集合。在数据库中不允许出现重复值。

(2) 保证一个联系中双亲记录和子记录之间是一对多的联系。(3)可以支持双亲记录和子记录之间的某些约束条件。例如,有些子记录要求双亲记录存在才能插入, 双亲记录删除时也连同删除。3. 网状数据模型的优缺点       相对于层次模型,网状数据模型所能描述的自然关系更多,主要优点如下:• 能够更为直接地描述现实世界.例如,一个节点可以有多个双亲,节点之间可以有多种联系。• 具有良好的性能,存取效率较高.      网状数据模型也存在不少缺点,主要表现在:结构比较复杂,而且应用环境越大,数据库的结构就变得越复杂, 不利于最终用户掌握:模型的数据定义语言( DDL ) 、数据操作语言( DML ) 复杂,用户不容易使用。      此外,网状模型中由于记录之间的联系是通过存取路径实现的,因此应用程序在访问数据时必须选择适当的存取路径。因此,用户必须了解系统结构的细节,加重了编写应用程序的负担。

同一个表中的属性应具有不同的属性名。

( 4 ) 码: 表中的某个属性或属性组的值可以唯一地确定一个元组,且属性组中不含多余的属性,这样的属性或属性组称为关系的码。( 5 ) 域: 属性的取值范围。例如, 大学生年龄属性的域是( 1 8~30 ) ,性别的域是(男,女)。(6) 分量: 无组中的属性值。( 7 ) 关系模式:关系的型称为关系模式, 是对关系的描述。关系模式的一般表示如下:

在关系模型中,实体集以及实体间的联系都是用关系来表示的。关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是:关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。关系模型示例如图l. 8 所示。

2. 关系模型的数据操作与完翻业包柬       关系数据模型的操作主要包括查询、插入、删除和修改数据,这些操作必须满足关系的完整性约束条件。关系模型中数据操作的特点是集合操作方式, 即操作对象和操作结果都是集合,这种操作方式也称为一次一集合的方式。相应地,非关系数据模型的操作方式是一次一记录的方式。       关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。实体完整性定义数据库中每一个基本关系的主码应满足的条件,能够保证元组的唯一性。参照完整性定义表之间的引用关系,即参照与被参照关系。用户定义完整性是用户针对具体的应用环境制定的数据规则,反映某一具体应用所涉及的数据必须满足的语义要求。

3. 关系模型的优缺点         关系模型是当前使用最为广泛的一类模型,目前的主流数据库系统如Oracle、SQLSe凹町等都采用关系模型。关系数据模型的优点主要体现在以下几点:• 关系模型与非关系模型不同,它是建立在严格的数学理论基础上的.• 关系模型的概念羊一,实体与实体间的联系都用关系表示,对数据的检索结果也是关系(即表) ,所以其数据结构简单、清晰,用户易懂易用。• 关系模型的物理存储和存取路径对用户透明,从而具有更高的数据独立性、更好的安会保密性,简化了程序员的数据库开发工作。需要注意的是,虽然关系模型是现在的主流, 但该模型也存在一定的缺陷, 主要表现在如下两方面:• 由于存取路径对用户透明,查询效率往往不如非关系数据模型高,因此为了提高性能,必须对用户的查询请求进行优化,这就增加了开发数据库管理系统的难度和负担.• 关系数据模型不能以自然的方式表示实体集间的联系,存在语义信息不足、数据类型过少等弱点。

目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。目前主流关系型数据库管理系统有Oracle、Access 和SQL Se凹町等。本节根据选择数据库管理系统的依据比较分析这儿种主流数据库管理系统的优势和不足。

Microsoft Office Access 是由微软( Microsoft ) 公司发布的一款关系数据库管理系统。它结合了Microsoft Jet Database Engine 和图形用户界面两项特点,是Microsoft Office 的系统程序之一。1. 优势Microsoft Office Access 提供了一个丰富的开发环境。这个开发环境给了用户足够的灵活性和对Microsoft Windows 应用程序接口的控制,同时保护用户免遭用高级或低级语言开发环境开发时所碰到的各种麻烦。图1.9 所示为Microsoft Office Access 数据库的主界面。

Microso负Office Access 是一个把数据库引擎的图形用户界面和软件开发工具结合在一起的数据库管理系统,其主要优势表现在如下几个方面:(1 )存储方式单一。Access 管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为( .mdb ) 的数据库文件中, 便于用户的操作和管理。(2) 面向对象。Access 是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化, 将数据库管理的各种功能封装在各类对象中。它将一个应用系统当作是由一系列对象组成的,对每个对象都定义一组方法和属性。通过对象的方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。同时,这种基于面向对象的开发方式,使得开发应用程序更为简便。

(3)界面友好、易操作。Access 是一个可视化工具,风格与Windows 完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。( 4) 集成环境、处理多种数据信息。Access 是基于Windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。( 5 ) Access 支持ODBC (开放数据库连接, Open Database Connectivi桐,利用Access强大的DDE (动态数据交换〉和OLE (对象的连接和嵌入)特性, 可以在一个数据表中嵌入位图、声音、Excel 表格、Word 文挡, 还可以建立动态的数据库报表和窗体等。Access 还可以将程序应用于网络,并与网络上的动态数据相连接。利用数据库访问页对象生成盯ML 文件, 轻松构建IntemetlIntranet 的应用。

2. 缺陷尽管Micros。我Office Access 具有许多的优点, 但它毕竟是一个小型数据库,不可避免地存在一些缺陷, 主要表现在:(1 )数据库过大时性能下降明显。一般来说, 当Access 数据库达到1 00MB 左右的时候,数据库性能会显著下降。例如,当访问使用Access 作为数据库的网站时,人数过多时容易造成IIS 假死,过多消耗服务器资源。(2) 容易出现各种因数据库刷写频率过快而引起的数据库问题。(3) Access 数据库安全性比不上其他类型的数据库。

SQL Se凹er 也是Microsoft 公司推出的关系型数据库管理系统, 具有使用方便、可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 饨的PC 到运行MicrosoftWindows 2012 的服务器等多种平台使用。图1.10 所示为Microsoft SQL Se凹er 数据库的Management Studio 主界面。

Microso负SQL Server 是一个全面的数据库平台,使用集成的商业智能( BI) 工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。SQLSe凹町的主要特点如下:(1 )真正的客户机/服务器体系结构。(2) 图形化用户界面,使系统管理和数据库管理更加直观、简单。(3) 丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。( 4) SQL Se凹er 与Windows NT 完全集戚,利用了NT 的许多功能,如发送和接收消息、管理登录安全性等, SQL Server 也可以很好地与Microsoft Office 产品集成。( 5) 具有很好的伸缩性, 可跨越多种平台使用。(6) 对Web 技术的支持度高,使用户能够很容易地将数据库中的数据发布到Web 页面上。( 7) SQL Server 新版本提供数据仓库功能,这个功能只在Oracle 和其他更昂贵的DBMS中才有。

( 8 ) 内存在线事务处理( OLTP ) 引擎, 内存OLTP 整合到SQL Server 的核心数据库管理组件中,它不需要特殊的硬件或软件就能够无缝整合现有的事务过程,允许将SQL Server内存缓冲池扩展到固态硬盘( SSD) 或SSD 阵列上。这一点对于支持繁重读负载的OLTP 操作特别好,能够降低延迟、提高吞吐量和可靠性,消除10 瓶颈。(9) 云整合, 引入了智能备份( Smart Backups) 概念,能自动决定要执行完全备份还是差异备份,以及何时执行备份。还允许将本地数据库的数据和日志文件存储到Azure 上。此外,SQL Server Management Studio 提供了一个部署向导,它可以帮助用户轻松地将现有本地数据库迁移到Azure 虚拟机上。

Oracle 数据库系统是美国甲骨文( Oracle) 公司提供的以分布式数据库为核心的一组软件产品,是目前流行的客户/服务器(CLIENT/SERVER) 或B/S 体系结构的数据库之一。图1.1 1所示为Or部le 10g 数据库的Developer 主界面。

Oracle 数据库是目前世界上使用最为广泛的数据库管理系统, 作为一个通用的数据库系统,它具有完整的数据管理功能:作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库, 它实现了分布式处理功能。只要在一种机型上学习了。racle 知识, 便能在各种类型的机器上使用。编写本书时, Oracle 数据库的最新版本为Oracle Database 12c 0 Oracle 12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性, 如Oracle Multitenant 可快速整合多个数据库,而Automatic DataOptimization 和HeatMap 能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的增强,使得Oracle 12c 成为私有云和公有云部署的理想平台。Oracle 的特点如下。

(1 )名副其实的大型数据库:由Oracle 建立的数据库, 最大数据量可达几百吉字节。(2) 共享SQL 和多线索服务器体系结构:这两个特性的结合可减少Oracle 的资源占用,增强处理能力,支持成百甚至上千用户。(3)跨平台能力: Oracle 数据库管理系统可以运行在100 多个硬件和软件平台上。这一点是其他PC 平台上的数据库产品所不及的。( 4 ) 分布式数据库:可以便物理分布不同的多个数据库上的数据被看成是一个完整的逻辑数据库。尽管数据操纵的单个事务可能要运行于多处地点,但这对应用程序却是透明的,就好像所有的数据都是物理地存储在本地数据库中。( 5 ) 卓越的安全机制: 包括对数据库的存取控制、决定可以执行的命令、限制单一进程可用的资源数量以及定义数据库中数据的访问级别等。(6) 支持客户机/服务器方式,支持多种网络协议。除上面讲解的Microsoft Office Access、SQL Server 和Oracle 三个典型数据库外, 还有许多关系型数据库也较为常见,如IBM DB2, Informix、Sybase、MySQL 等, 有兴趣的读者可自行了解,此处不再赘述。

SQLSe凹er 2016 是目前SQL 如何er 系列数据库管理系统的;陆新版本, 是该系统家族中最重要的一代产品。本章主要介绍SQL Server 2016 的特点、安装和卸载及使用SQ L Se凹er 2016帮助等相关内容。通过本章的学习,可以便读者对SQL Server 2016 这款数据库管理系统有一个全方位的了解。本章重点内容:• 了解SQL Server 数据库软件的特点• 了解SQL Server 2016 新的技术点• 掌握S QL Server 2016 的安装和卸载• 了解如何使用SQL Server 2016 帮助功能

SQL Server 是Mi crosoft 公司推出的关系型数据库管理系统, 是一个全面的数据平台,为企业提供可革的数据支持。2016 年7 月1 日,微软发布了SQL Server 数据库软件家族中最重要的一代产品,命名为SQL Server 2016 。从最早的OS/2 版本到如今的SQL Server 2016, SQLSe凹er 的每一代产品都会在完善基本功能的前提下增加新的功能,微软SQL Server 2016 正式版有着涉及数据库引擎、分析服务等多个方面的功能性增强和改进,同时也增加了很多全新的功能, 如数据全程加密、支持R 语言、延伸数据库、实时业务分析与内存OLTP、原生JSON支持、行级安全等。         用户可以根据应用程序的需要安装不同版本的SQL Se凹er 2016 组件,不同版本的SQLServer 2016 可以满足单位和个人独特的性能、运行时间以及价格要求.在具体安装过程中,选择哪些S QL Server 组件主要还是根据用户的需求来指定。下面介绍SQL Server 2016 中的一些常用版本。微软SQL Server 2 016 正式版分为4 个版本,分别是企业版( Ente叩ri se) 、标准版CStand缸d ) 、速成版C Express) 和开发人员版C Developer) 。与Visual Studio 一样, SQL Se凹er2016 也同样提供免费版本,其中Express 速成版和Developer 开发人员版就是免费的,大家可以随意下载使用。

每一个版本都分为64 位和32 位两种类型,主要区别如下。• Enterprise ( 64 位和32 位) : SQL Se凹er 2016 Enterprise 是SQL 如何er 2016 中的高级版本,此版本提供了全面的高端数据中心功能,性能快捷、虚拟化不受限制,同时还具有端到端的商业智能。• Standard (64 位和32 位) : SQL Server 2016 Standard 版提供了基本数据管理和商业智能数据库,使部门和小型组织能够顺利运行其应用程序并支持将常用开发工具用于内部部署和云部署。• Developer ( 64 位和32 位): SQL Se凹er 2016 Developer 版本可以支持程序开发人员构建任意符合SQL Se凹er 规则的应用程序。Developer 版包含Enterprise 版中的所有功能,但这些功能只能用于开发和测试,不能用作服务器.• Express( 64位和32 位): SQL Server 2016 Express版本是一款入门级的免费SQLServer版本,此,版本主要用于学习和构建小型的应用程序, Express 版包含SQLSe凹er 中最基本的数据管理功能。SQLS巳:rver 2016 各版本的主要区别在于SQL Server 数据库引擎实例的大小、最大关系数据库大小等。对于初学者而言, Express 免费版就能满足各功能的学习要求。

SQL Se凹er 作为目前程序开发中使用广泛的数据库软件之一, 每一次版本的更新都会带来许多不同的变化。最新版本的SQL Se凹er 2016 数据库引擎引入了一些新功能和增强功能,这些功能可以提高设计、开发和维护数据存储系统的架构师、开发人员和管理员的能力和工作效率。本节将对SQLSe凹er 2016 中的版本特点进行讲述。

相对于旧版本, SQL Server 2016 中新的组件增加了许多新的功能。在性能上, SQL Se凹er 2016 利用实时内存业务分析计算技术C Real-Time OperationalAnal严ics & In-Mernory OLTP) 让OLTP 事务处理速度提升了3 0 倍,可升级的内存列存储技术Ccolurnnstore) 让分析速度提升高达100 倍,查询时间从儿分钟降低到了几秒钟。安全性上, SQLSe凹er 2016 中也加入了一系列的新安全特性:• 数据全程加密(A1ways Enc可pted) 能够保护传输中和存储后的数据安全.

• 透明数据加密( Transparent Data Enc可ption) 只需消耗极少的系统资源即可实现所有用户数据加密.• 层级安全性控管( Row Level Security )让客户基于用户特征控制数据访问。除此之外, SQL Se凹er 2016 还增加了许多新特性:• 动态数据屏蔽( Dynamic Data Masking) •• 原生JSON 支持。• 通过PolyBase 简单高效地管理T-SQL 数据.• SQL Se凹er 支持R 语言。• 多TempDB 数据库文件。• 延伸数据库( Stretch Database) •• 历史表( Temporal Table )。• 增强的Azure 混合备份功能。

考虑到企业级的应用程序将面临复杂的硬件配置、大量峰值需求等一系列的重要挑战,Microsoft 提出了混合云策略, 为传统的私有云、公共云和混合云环境提供支持, 从而克服这些重要挑战。SQL Se凹er 2016 直接支持将数据文件和日志部署到Microsoft Azure 公有云存储,从而可以无缝打通公有云和私有云的边界, 其架构如图2. 1 所示。

将数据库部署在Azure Blob 中存储的优点在于可提高数据库性能、便于数据的迁移、提高数据库安全性、将数据虚拟化。此外, SQL Se凹er 2016 的存储引擎中增加了对于Azure Blob的数据访问机制, 如图2 .2 所示。

SQL Server 2016 与Azure 有了更深程度的集成,用户可以通过将数据库文件分配在Azure上进行存储,为数据库带来性能、可维护、安全上的多重保障。

在对SQL Server 2016 有了初步的了解后,本节将学习如何将SQLSe凹er 安装在计算机上。SQL Server 20 1 6 的安装程序采用了简单直观的图形化界面,用户在安装过程中只需要根据系统提示选择或输入相关的配置信息即可。

在安装SQL Server 2016 之前,首先需要对计算机的硬件和软件环境进行简单的评估。SQLSe凹er 2016 是一款系统资源消耗相对较大的软件,如果硬件没有达到要求,就无法安装,系统要求最低硬件配置如表2 .1所示。表2.1 安装SQL Server 2016 硬件要求

安装SQL Se凹er 2016 除了要符合表2.1中的硬件要求外,在软件环境方面,首先建议在NTFS 文件格式下运行SQL Se凹er 2016 ,因为FAT32 格式没有文件安全系统;其次, NETFramework 3.5 SP1 是SQL Se凹er Management Studio 必需的,在安装SQL Server 之前要确保有.NET Framework 环境。在安装SQL SelVer 2016 之前要确保计算机操作系统为Windows8 及以上版本,否则会因为缺少组件而导致无法正常安装,并且仅x64 处理器支持SQL SelVer 2016 的安装, x86处理器不再支持此安装。

2.6经典习题与面试题

在安装好SQL Server 2016 后, 用户首先需要做的工作就是创建一个数据库。SQL Server2016 的数据库是指以一定方式存储在一起、能为多个用户共亭、具有尽可能小的冗余度、与应用程序,彼此独立的数据集合。在SQL Se凹er 2016 中创建数据库是每一个软件开发人员和数据库管理员的必备技能。本章重点内容:• 了解数据库的基本概念• 掌握数据库常用对象和数据库的组成• 掌握数据库的命名规则• 会使用管理器创建和修改数据库

在具体介绍SQL Server 2016 中如何创建数据库之前,读者需要对数据库的基本概念有初步了解。本节将为读者介绍一些数据库的专用术语,如数据库对象、系统数据库、表、记录、索引等。

简单地说, 数据库是一个单位或一个应用领域的通用数据处理系统, 存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的, 按一定的数据模型进行组织、描述和存储。数据库的结构基于数据间的自然联系,可提供一切必要的存取路径,且数据不针对某一应用, 而是面向全组织的,具有整体的结构化特征。        数据库中的数据是为众多用户共享信息而建立的,已经摆脱了具体程序的限制和制约。不同的用户可以按各自的用法使用数据库中的数据,多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。

1 . 基本结构       数据库的基本结构分3 个层次,反映了观察数据库的3 种不同角度。以内模式为框架所组成的数据库叫作物理数据库,以概念模式为框架所组成的数据库叫作概念数据库,以外模式为框架所组成的数据库叫作用户数据库。(1 )物理数据层它是数据库的最内层, 是物理存储设备上实际存储的数据的集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。(2) 概念数据层它是数据库的中间一层, 是数据库的整体逻辑表示。概念数据库指出了每个数据的逻辑定义及数据间的逻辑联系,是存储记录的集合,涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。(3)用户数据层它是用户所看到和使用的数据库, 表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。

2 . 主要特点        数据库技术是数据管理技术发展到现在的最新产物,经历了人工管理阶段和文件系统阶段。数据库的主要特点是实现数据共享、减少数据冗余、实现数据集中控制,提高数据的可靠性和安全性,具体如下:(1)实现数据共享数据共享包括所有用户可同时存取数据库中的数据, 也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。( 2) 减少数据的冗余度与文件系统相比,由于数据库实现了数据共事, 因此避免了用户各自建立应用文件,减少了大量重复数据,减少了数据冗余,维护了数据的一致性。(3)数据的独立性数据的独立性包括逻辑独立性和物理独立性,数据库实现了数据在逻辑和物理上的相对独立。

(4) 数据实现集中控制在文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。(5) 数据的安全性和可靠性数据库提供了相关技术保障数据具有一致性和可维护性,主要包括安全性控制、完整性控制和并发控制。其中,安全性控制用于防止数据丢失、错误更新和越权使用;完整性控制用于保证数据的正确性、有效性和相容'性;并发控制使在同一时间周期内允许对数据实现多路存取,又能防止用户之间的不正常交互作用。(6) 故障恢复故障恢复是由数据库管理系统提供的一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或逻辑上的错误。例如,对系统的误操作造成的数据错误等。

3. 数据库种类        数据库通常分为层次式数据库、网络式数据库和关系式数据库3 种。不同的数据库是按不同的数据结构来联系和组织的。在当今的互联网时代,最常见的数据库模型主要有两种,即关系型数据库和非关系型数据库。(1)关系型数据库关系型数据库模型是把复杂的数据结构归结为简单的二元关系(二维表格形式)。在关系型数据库中,对数据的操作儿乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。关系型数据库诞生40 多年了,从理论产生发展到现实产品。例如, Oracle 、SQL Se凹er和MySQL 等都是关系型数据库。其中, Oracle 在数据库领域处于霸主地位,形成每年高达数百亿美元的庞大产业市场。(2) 非关系型数据库随着互联网Web 2.0 网站的兴起,传统的关系数据库在应付Web 2.0 网站,特别是超大规模和高并发的SNS 类型的Web 2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库(Not 臼ùy SQL, NoSQL,不仅是SQL)则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库在特定的场景下可以发挥出难以想象的高效率和高性能,它是作为对传统关系型数据库的一个有效补充。

非关系型数据库是一项全新的数据库革命性运动。NoSQL 在早期就有人提出,发展至2009趋势越发高涨。NoSQL 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念是一种全新的思维的注入。

数据库对象是数据库的组成部分,常见的对象有表、索引、视图、图表、默认值、规则、触发器、存储过程、用户、序列等,本小节将简要介绍这些对象的概念,为后续学习打下基础。

数据库中的表与日常生活中使用的表格类似,由行( Row ) 和列(Column) 组成。其中,列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括若干列的信息项。一行数据称为一个或一条记录,是有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于唯一地确定一条记录。

索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径, 并且可监督表的数据,使其索引所指向的列中的数据不重复。

视图看上去似乎与表一模一样,具有一组命名的字段和数据项, 但它其实是一个虚拟的表,在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。

图表其实就是数据库表之间的关系示意图, 利用图表可以编辑表与表之间的关系。

默认值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。

规则是对数据库表中数据信息的限制,其限定的是表的列。

触发器是一个用户定义的SQL 事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。

存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语旬,经编译后存储在数据库中的SQL 程序。

所谓用户,就是有权限访问数据库的人,同时需要自己登录账号和密码。一般来说,数据库用户分为管理员用户和普通用户,前者可对数据库进行修改删除,后者只能进行阅读、查看等操作。除了如上列出的数据库对象之外,不同的数据库管理系统也有部分自定义的对象,将在具体学习中分别介绍,此处不再赘述。

前面章节提到,数据库是相关数据的集合。一个数据库含有各种成分,包括数据表、记录、字段、索引等。从使用者的观点看,数据库主要由文档( Documents) 、记录( R巳cords) 和字段( Fields) 3 个层次构成。从开发者的角度看,数据库主要由数据表( Table) 、记录( Record) 、字段( Field ) 、索引CIndex ) 、查询( Query ) 和视图( View ) 等部分组成, 具体组成部分如下。(1)数据库( Database)SQL Server 20 1 6 数据库是关系型数据库,一个数据库由一个或一组数据表组成。每个数据库都以文件的形式存放在磁盘上,即对应于一个物理文件。不同的数据库与物理文件对应的方式也不一样。(2) 数据表( Table)数据表简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据,每个表中都含有相同类型的信息。事实上,数据表实际上是一个二维表格。例如,一个班所有学生的考试成绩可以存放在一个表中,表中的每一行对应一个学生, 包括学生的学号、姓名及各门课程成绩。(3)记录( Record)表中的每一行称为一个记录, 它由若干个字段组成。( 4 ) 字段( Field )表中的每一列称为一个字段,也称为域。每个字段都有相应的描述信息, 如数据类型、数据宽度等。( 5 ) 索引( Index )为了提高访问数据库的效率,可以对数据库使用索引。当数据库较大时,为了查找指定的记录,使用索引和不使用索引的效率有很大差别。索引实际上是一种特殊类型的表,其中含有关键字段的值(由用户定义)和指向实际记录位置的指针,这些值和指针按照特定的顺序(也由用户定义〉存储,从而可以以较快的速度查找到所需要的数据记录。

( 6 ) 查询( Query )查询实质上是一条SQL (结构化查询语言)命令, 用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。当从数据库中读取数据时,往往希望读出的数据符合某些条件, 并且能按某个字段排序,使用查询可以使这一操作容易实现而且更加有效。SQL 是非过程化语言(有人称为第4 代语言) ,在用它查找指定的记录时,只需指出做什么,不必说明如何做。每个语句可以看作是一个查询(Qu町) ,根据这个查询可以得到需要的查询结果。

( 7 ) 过滤器( Filter)过滤器是数据库的一个组成部分, 它把索引和排序结合起来, 用来设置条件, 然后根据给定的条件输出所需要的数据。(8) 视图( View)数据的视图指的是查找到(或者处理)的记录数和显示(或者进行处理)这些记录的顺序。在一般情况下, 视图由过滤器和索引控制。

3. 查看系统数据库数据同样, SQL Server 2016 允许用户通过使用以下方法获得系统数据库的目录和相关系统信息:(1)系统目录视图。(2) SQL-SMO 。(3) Windows Management Instrumentation (WMI)接口。( 4) 应用程序中使用的数据API (如ADO、OLEDB 或ODBC ) 的目录函数、方法、特性或属性。( 5) T-SQL 系统存储过程和内置函数。

为了提供完善的数据库管理机制, SQL Se凹er 20 1 6 设计了严格的命名规则。用户在创建或引用数据库实体(如表、索引、约束等〉时, 必须遵守SQL Server 20 16 的命名规则, 否则有可能发生一些难以预料和检查的错误。本节将具体讲解标识符的分类和格式、数据库对象的命名规则与实例命名规则。

SQL Server 20 1 6 的所有对象, 包括服务器、数据库以及数据库对象,如表、视图、列、索引、触发器、存储过程、规则、默认值和约束等都可以有一个标识符。对绝大多数对象来说,标识符是必不可少的, 但对某些对象(如约束)来说, 是否规定标识符是可选的。对象的标识符一般在创建对象时定义, 作为引用对象的工具使用。例如下面的SQL 语句:

具体来说, SQL Se凹er 201 6 共定义了两种类型的标识符: 常规标识符( Regular Identifier)和分隔标识符( Delimited Identifier) 。(1)常规标识符: 常规标识符严格遵守标识符有关格式的规定, 在T-SQL 语句中, 凡是常规标识符都不必使用分隔符, 如使用口和, ,来进行分隔。例如,上述例子中使用的表名student 就是一个常规标识符,在student 上不必添加分隔符。(2) 分隔标识符: 那些使用了分隔符号(如口和, ,等〉来进行位置限定的标识符。使用了分隔标识符, 既可以遵守标识符命名规则, 又可以不遵守标识符命名规则。需要注意的是,遵守了标识符命名规则的标识符, 加分隔符与不加分隔符是等效的。例如, SELECT * FROM[sωdent]语句从student 表格中查询出所有数据,其功能与SELECT * FROM student 语句等效。这是因为在" [] "中的标识符遵守标识符命名规则, "[]"被忽略不计。

如果是不遵守标识符命名规则的标识符,那么在T-SQL 语句中就必须使用分隔符号加以限定,如:

在这个例子中,必须使用分隔标识符,因为在FROM 子句中的标识符my table 中含有空格, 而where 子句中的标识符order 是系统保留字。这两个标识符都不遵守标识符命名规则,必须使用分隔符,否则无法通过代码编译。

与程序设计语言类似, SQL Se凹er 2016 中的标识符必须符合一定的格式规定,其具体内容如下:(1)标识符必须是统一码(Unicode) 2.0 标准中规定的字符,以及其他一些语言字符,如汉字等。(2) 标识符后的字符可以是"_" "@" "#" "$"及数字。(3)标识符不允许是T-SQL 的保留字。(4) 标识符内不允许有空格和特殊字符。需要注意的是,标识符最多可以容纳1 28 个字符。此外,某些以特殊符号开头的标识符在SQLSe凹er 中具有特定的含义。例如,以"@"开头的标识符表示这是一个局部变革或一个函数的参数,以"#"开头的标识符表示这是一个临时表或一个存储过程,以"棉"开头的标识符表示这是一个全局的临时数据库对象。在T-SQL 中, 全局变量以" @@"开头。

SQL Server 20 1 6 使用T-SQL 语言,该语言中使用的数据对象包括表、视图、存储过程、触发器等, 这些对象的标识符也需符合如下命名规则。(1)第一个字符必须是这些字符之一:字母a-z 和A-Z、来自其他语言的字母字符、下划线-、@或者数字符号扒(2) 后续字符可以是所有的字母、十进制数字、@符号、美元符号($)、数字符号或下划线。除非另外指定,否则所有对数据库对象名的T-SQL 引用可以是由4 部分组成的名称,格式如下:

具体的语法解释如下:• server_name 指定链接服务器名称或远程服务器名称.• 当对象驻留在SQL Server 2016 数据库中时, database_name 指定该SQL Server 2016数据库的名称;当对象在链接服务器中时,则指定OLEDB 目录。• 如果对象在SQL Server 2016 数据库中, owner name 指定拥有该对象的用户;当对象在链接服务器中时,则指定OLEDB 架构名称。• object_name 是引用对象的名称.引用对象名的格式如表3. 1 所示。

当引用某个特定对象时,不必总是为SQL Server 指定标识该对象的服务器、数据库和所有者。可以省略中间级节点,而使用句点表示这些位置。对象名的有效格式是:

所谓SQL 实例,即SQL 服务器引擎。每个SQL Server 2016 数据库引擎实例各有一套不为其他实例共享的系统及用户数据库,在一台计算机上可以安装多个SQL Server 2016 , 每个SQL Server 2016 就可以理解为一个实例。

实例又分为"默认实例"和"命名实例",如果在一台计算机上安装第一个SQLServer,命名设置保持默认, 那么这个实例就是默认实例。在SQL Server 20 1 6 中,默认实例的名字采用计算机名,实例的名字一般由计算机名字和实例名字两部分组成。为更好地理解实例,读者可以从如下几个方面着手:(1)实例名称是一个SQLSe凹er 服务的名称,可以为空或者任何名称(英文字符) ,实例名称不能重复。(2) 如果安装时一直提示写实例名称,说明已经存在一个默认名称的SQLServer 实例,它使用了默认的空名称。(3)一个实例就是一个单独的SQL Server 服务。如果安装了指定的SQL Server 实例,可以在Windows 服务列表中看到该实例的服务名称。( 4 )连接数据库时,必须指明数据库实例名称。例如,使用默认配置安装了一个SQL Server后,它的实例名称为空。(5) 再次执行SQLServer 安装程序,并不会提示己经安装了SQL Server,而是在设置实例名称时,让用户指定一个新的实例名称,才能进行下一步。(6) 卸载SQLServer 时,可以选择卸载一个SQLSe何时实例。

提示:正确掌握数据库的命名和引用方式是用好SQL Server 的前提,也有助于用户理解SQLServer 中的其他内容。

SQL Se凹er 2016 中有多种创建数据库的方式,用户可根据自身的喜好或不同的应用环境进行选择。同样地, SQL Server 20 1 6 数据库的管理也有多种实现方式。本节将为读者做具体介绍。

本小节主要讲解如何使用SQLSe凹er 20 1 6 管理器直接创建数据库,从限制和局限、必备条件、建议及权限儿方面开展讨论, 并演示创建流程。(1)限制和局限: 在一个SQL Se凹町的实例中最多可以指定32767 个数据库。(2) 必备条件: CREATE DATABASE 语句必须以自动提交模式(默认事务管理模式〉运行,不允许在显式或隐式事务中使用。(3)建议:创建、修改或删除用户数据库后,应备份mas也r 数据库。在创建数据库时,根据数据库中预期的最大数据草创建尽可能大的数据文件。(4) 权限:需要有对master 数据库的CREATE DATABASE 权限,或CREATE ANY DATABASE/ALTER ANY DATABASE 权限。为了控制对运行SQL Se凹er 实例的计算机上的磁盘使用,通常只有少数登录账户才有创建数据库的权限。       在SQL Server 20 16 中创建数据库一般有两种方法,一是使用管理器创建;二是通过SQL命令创建。其中, SQL Se凹er 2016 的管理器是SQL Server Management Studio Express 工具。下面演示使用管理器创建数据库的具体步骤。

本小节讲解如何使用管理器修改数据库, 包括重命名数据库、更改数据库的选项设置、增加数据库的大小及显示数据库的数据和日志空间信息的设置。

1. 重命名数据库

2. 更改数据库的选项设置

对于已经创建的SQL Server 2016 数据库,用户还可以更改该数据库的属性,可以通过【选项】窗体来实现,具体步骤如下:

3. 增加数据库的大小当用户在使用SQL Server 2016 数据库的过程中,因数据量的增大而导致数据库无法容纳时,可以增加数据库的大小,其实现步骤如下:

4. 显示数据库的数据和日志空间信息若要显示SQL Server 2016 数据库的数据和日志空间信息,则可通过如下步骤来实现:

本小节讲解如何使用企业管理器删除数据库,同样也从限制和局限、必备条件、建议及权限儿方面开展讨论, 并演示删除流程。

(1)限制和局限:不能删除系统数据库。( 2) 必备条件:删除数据库中的所有数据库快照。如果日志传送涉及数据库,就删除日志传送。如果为事务复制发布了数据库, 或将数据库发布或订阅到合并复制,就从数据库中删除复制。(3 )建议:考虑对数据库进行完整备份,只有通过还原备份才能重新创建己删除的数据库。( 4 ) 权限:若要执行DROP DATABASE 操作,则用户必须至少对数据库具有CONTROL权限。当用户确认要删除SQL Se凹er 2016 中的某个数据库时,可以直接在SQL ServerManagement Studio Express 管理器中删除该数据库,具体操作为:在SQLServer 对象资源管理器中选择目标数据库,如TEST 数据库,然后右击,选择【删除】命令,如图3.9 所示,确认选择了正确数据库,然后单击【确定】按钮。

数据库的创建和使用是用户学习SQL Server 20 1 6 的入门环节。本章阐述数据库的基本概念,首先介绍了数据库的常用对象、组成及系统数据库;然后简要描述SQL Server 数据库的命名规则;最后展示使用SQL Server 2016 管理器创建和管理数据库的详细步骤。本章的难点是需要掌握数据库领域大量的基本概念,虽然有些概念一开始接触会感到比较抽象, 但随着学习的逐渐推进, 在后续章节中就会逐渐变得清晰、具体起来。

本章主要介绍SQL Server 2016 中的数据表对象,并对数据表的基本操作进行详细讲解,对SQL Server 2016 中的基本数据类型、创建新的数据表、查看数据表结拘、添加数据字段、修改数据类型、对数据表的约束操作等内容做阐述。通过本章的学习, 用户可以对数据表有基本的认识和了解, 掌握创建和修改数据表的基本方法, 理解数据约束的作用和意义。本章重点内容:• 理解数据表和数据库之间的关系• 掌握数据表中的基本数据类型• 掌握使用管理器创建和维护数据表• 数据的约束操作

数据表是数据库中最基本的操作对象,通常说的把数据存放在数据库中其实就是存放在数据库中的一张张数据表中。数据表中的数据按照行和列的规则来进行数据存储, 每一行为一条数据记录, 一条数据记录是由多个字段的描述信息组成的。每一列称为一个字段,列的标题称为字段名, 它们都具有相同的描述信息,如数据类型、字段大小等。一系列行和列的合集称为域。         在具体的学习过程中,读者可以把数据库理解为一个记录本, 数据表就是其中的每一页纸。一个数据库数据内容的多少其实并不是指这本记录本有多大多厚, 而是指每一页纸张记录的内容有多少。        数据表的主要作用是存储各类数据信息,由行和列组成。例如,有一张记录了员工信息的employee 表,每一个字段就是用来描述员工的一个特定类型信息,比如姓名,每一行则包含用于描述某一员工的所有信息: 工号、姓名、性别、学历,这些信息的集合称为一条记录,如表4.1 所示。

数据虽然是用户存储数据的基本依据,用于设置保存数据的基本类型。SQL Server 2016中支持多种数据类型的设置,包括字符型、数值型、日期型等。数据类型的作用在于规划每个字段所存储的数据内容类别和数据存储量的大小, 合理地分配数据类型可以达到优化数据表和节省空间资源的效果。      SQL Server 20 16 数据库管理系统中的数据类型分为两类:一类是系统提供给用户使用的默认数据类型,称为基本数据类型;另一类是用户自定义的数据类型。下面先介绍基本数据类型的内容。

2. 浮点数据类型

3. 字符类型字符类型同样是SQL Server 2016 中常用的数据类型,可用于存储汉字、符号、英文、标点符号等,数字同样可以作为字符类型来存储。SQL Server 2016 的字符类型包含如下4 种:(1 ) CHARCHAR 数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列此类型的数据时,用户必须指定列长。当用户知道要存储的数据的长度时,此数据类型就较为适用。例如,当一个字段要用于存储手机号码时, 需用到11 个字符, CHAR 类型默认为存储一个字符, 最多可存储8000 个字符。(2) VARCHARVARCHAR 数据类型与CHAR 类型一样,用来存储非统一编码型字符数据。与CHAR 型不一样的是,此数据类型为变长。当定义一列该数据类型的数据时,用户要指定该列的最大长度。它与CHAR 数据类型最大的区别是, 存储的长度不是列长, 而是数据的长度。(3) NCHARNCHAR 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符, 而不是用单字节(普通文本中的情况)。它允许大量地扩展字符。此数据类型能存储4000 种字符,使用的字节空间上增加了一倍。

(4) NVARCHARNVARCHAR 数据类型是一种变长类型的字符型数据, 具有统一的编码方式。此数据类型能存储4000 种字符,使用的字节空间增加了一倍。

4. 日期和时间类型(1) DATEDATE 类型用于存储常用日期,该类型占3 个字节的存储空间,数据的存储格式为YYYY-MM-DD 。• YYYY: 表示日期的年份,取值范围为0001 -9999.• MM: 表示日期中的月份,取值范围为01-12.• DD: 表示日期中的某一天,取值范围为0 1-3 1 .(2) TIMETIME 类型用于存储一天当中的某一个时间,该类型占5 个字节的存储空间,数据的存储格式为HH :MM:SS[.NNNNNNN]。• HH: 表示存储时间的小时位,取值范围为0-23.• MM: 表示存储时间的分钟位,取值范围为仙5 9.• SS: 表示存储时间的秒位,取值范围为胁5 9.• N: 表示存储时间秒的小数位,取佳范围为0-9999999.

(3) DATETIMEDATETI如E 数据类型用来表示日期和时间。这种数据类型存储从1 753 年1 月1 日到9999年12 月3 1 日的所有日期和时间数据,精确到三百分之一秒或3.33 毫秒,该类型占用8 个字节的存储空间。( 4) DATETIME 2DATETIME 2 是从SQL Se凹er 2008 版本以后支持的新日期类型,是DATETIME 的扩展。相比于DATET队伍, DATET趴在E 2 所支持的日期从000 1 年01 月01 日到9999 年12 月3 1 日,时间精度为100 纳秒, 占用6~8 字节的存储空间。( 5) SMALLDATET1MESMALLDA TETIME 类型与DATET胁伍类型相似, 只是它所支持的日期范围更小,从1900年1 月1 日到2079 年6 月6 日, 占用4 字节的存储空间。

(2) VARBINARY

VARBINARY 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,应该使用这种数据类型。9. 其他数据类型( 1) ROWVERSION在SQLServer 2016 中,每一次对数据表的更改, SQLSe凹er 都会更新一个内部的序列数,这个序列数就保存在ROWVERSION 字段中。所有ROWVERSION 列的值在数据表中是唯一的,并且每张表中只能有一个包含ROWVERSION 字段的列存在。使用ROWVERSION 作为数据类型的列,其字段本身的内容是无自身含义的,这种列主要是作为数据是否被修改过、更新是否成功的作用列。

(2) TIMESTAMP。TIMESTAMP 时间戳数据类型和ROWVERSION 有一定的相似性,每次插入或更改包含TIMESTAMP的记录时, TIMESPAMP的值就会更新,一张表中只能有一个TIMESPAMP列。在创建表时只需提供数据类型即可,不需要为TIMESTAMP 所在的数据列提供列名:

(3) UNIQUEIDENTIFIER全局唯一标识符GUID,一般用作主键的数据类型,是由硬件地址、CPU 标识、时钟频率所组成的随机数据,在理论上每次生成的GUID 都是全球独一无二、不存在重复的。通常在并发性较强的环境下可以考虑使用。它的优点在于全球唯一性、可对GUID 值随意修改,但是缺点也很明显,检索速度慢、编码阅读性差。

( 4) CURSOR游标数据类型,该类型的数据用来存放数据库中选中所包含的行和列,只是一个物理地址的引用,并不包含索引,用于建立数据集。(5) SQL_ V ARIANT用于存储SQL Server 2016 支持的各种数据类型(不包括四XT 、NTEXT、IMAGE、TIMESTAMP 和SQL VARIANT) 的值。

在SQLSe凹er 2016 中,除了系统提供的基本数据类型外,用户还可以根据自己的需求自定义数据类型。这里要注意的是, 用户自定义数据类型并不是完全按照自己的意愿凭空创造,而是建立在系统的基础数据类型之上。用户在自定义数据类型的时候需要指定该类型的名称、所基于的基础数据类型是否可以为空等。在SQLSe凹er 2016 中可以使用两种方法来创建自定义数据类型,下面分别对这两种方法进行介绍。1. 使用资源管理器创建首先连接SQL Server 2016 服务器,创建一个用于测试的数据库test , 配置参数使用系统默认的即可。创建自定义数据类型的操作步骤如下:

2 . 使用T-SQ L 语句创建在SQL Server 2016 中除了能够使用管理器创建自定义类型之外, 还可以通过存储过程提供的sp_addtype 语句来创建,语法规则如下:

用户定义的数据类型基于在Microsoft SQL Se凹er 中提供的数据类型。当儿个表中必须存储同一种数据类型,并且为保证这些列有相同的数据类型、长度和可控性时,可以使用用户定义的数据类型。

执行上述操作后,【班级】字段添加成功。如果需要继续添加字段,只需在下一行继续输入字段信息即可。

使用对象资源管理器可以随时修改己经设定好字段的数据类型。例如,将刚才增加的班级字段的数据类型更改为nchar(10) ,同样进入数据表的设计视图中,单击数据类型最右边的下拉箭头, 选择nchar(10)即可,或者直接输入数据类型名也可以达到相同效果, 如图4 .1 2 所示。在更改字段数据类型的时候必须要考虑到数据内容和数据类型匹配的关系,对于己有数据的表来说,更改数据类型时是有风险的,如果新的数据类型与己存储的数据内容出现不匹配的情况,很有可能造成数据丢失,所以在更换数据类型的时候需要先考虑表中的内容,例如将性别字段的数据类型从ch叫2)更换为int 会出现如图4.13 所示的提示。

数据表建立完成后,可以随时对表的名称进行修改。展开表节点,对需要更改名称的数据表右击,在弹出的快捷菜单中选择【重命名】命令即可进入编辑状态, 如图4.14 所示。进入编辑状态后,输入新的名称即可,如图4 .1 5 所示。

通常在设计一张数据表的时候不仅要对表中所用字段和内容进行考虑,还有一个更加重要的问题,就是对数据完整性的设计。数据完整性是指数据的精确性和可靠性,防止表中出现不符合既定设置的数据(非法数据)。这些数据可能是用户没有根据规则输入的数据,也可能是黑客对于数据库破解所做出的一些特定尝试,确保数据的完整性对于整个数据库系统而言是非常重要的。       在SQL Server 2016 中,通常会通过约束的形式来对数据表进行完整性的设置,主要的约束方式分为5 种,分别是:主键约束Cprimary key constraint) 、唯一性约束C unique constraint) 、检查约束Ccheck constraint) 、默认约束C default constraint) 和外键约束Cforeign key constraint) 。

主键约束指的是可以在表中定义一个字段作为表的主要关键字,主键是表中记录的唯一性标识,每个表中只允许一个PRIMARYKEY 约束,并且作为PRIMARY 阻Y 约束的字段不允许空值。若在一个表中有多个列作为主键约束,则一列中的值可以是重复的,但是被主键约束列中的组合值一定要是唯一存在的。         在SQL Server 2016 中添加约束的方法主要有两种,一种是通过对象资源管理器来创建,还有一种则是使用T-SQL 语句来创建。使用对象资源管理器对学生选课数据库Cxsxk) 中的学生表Cdbo .xs) 中的学号字段进行PRIMARY 阻Y 的设定,具体操作如下:

唯一性约束(UNIQUE) 可以确保数据表在主键列中字段的唯一性。保证其中的数值只出现一次, 而不会出现重复的现象。例如,在员工信息表中需要录入所有员工的手机号码,然而并不可能有两位员工的手机号码是相同的,此时我们可以对手机号码字段进行唯一性约束的设置。在SQL Server 20 1 6 中可以对一个表中的多个字段进行UNIQUE 约束,在使用UNIQUE时需要注意以下儿点要素:• UNIQUE 约束是允许空值的.• UNIQUE 约束可以在一个数据表中设立多个。• 使用了UNIQUE 约束的字段会建立唯一性索引.• 在默认的情况下, UNIQUE 约束创建的是非聚集索引。使用对象资源管理器对姓名字段进行UNIQUE 约束操作的步骤如下:

检查约束是对录入到数据表中的数据所设置的检查条件,以限制输入值,用于保证数据库的完整性。通过逻辑表达式来对字段的值进行输入内容的限定,例如在员工表中定义了一个age 字段, 我们需要把这个字段所录入的内容限定在一个合理及合法的范围内,比如1 8--70 岁,可以通过逻辑表达式age>=18 AND age<=70 来进行判断,逻辑表达式会返回TRUE 或FALSE两个值, 用来表示符合约束条件和不符合约束条件两种情况。通常在使用检查约束时, 需要注意以下儿点:• 在对列进行约束限制时,只能与字段有关;在对表进行约束限定时,只能与限制表中的字段有关.• 在数据表中可以对多个列进行检查约束的设直。• 在使用CREATETABLE 时,只能对每个字段设置一个检查约束.• 若在表中对多个字段进行检查约束,则为表级约束.• 检查约束将在数据表进行时SERT 和UPDA四操作时对数据进行验证.• 设直检查约束的时候不能包含子查询。使用对象资源管理器对学生选课数据库(xsxk) 中的学生表(dbo .xs ) 中的性别字段进行检查约束的设定,要求只能输入"男"或"女",具体操作步骤如下:

默认约束是指当某一字段没有提供数据内容时,系统自动给该字段赋予一个设定好的值。当必须向表中加载一行数据但不知道某一字段值的值或该值不存在时,可以使用默认约束。默认约束可以使用常雀、函数、空值作为默认值。使用默认约束时,需要注意以下儿点:• 每个字段只能有一个默认约束.• 若默认约束设直的值大于字段所九许的长度,如l 截取到字段允许长度.• 不能加入到带有IDENTπY 属性或T胁伍STAMP 的字段上。• 若字段的数据类型为用户自定义类型,而且已有默认值绑定在此数据类型上,则不允许再次使用默认值。

外键约束是在两个表中的数据之间建立和加强链接的一列或多列的组合, 可控制在外键表中存储的数据。在外键引用中,当包含一个表的主键值的一个或多个列被另一个表中的一个或多个列引用时,就在这两个表之间创建了链接。使用外键约束需要注意以下儿点:• 外键约束是对字段参照完整性的设直。• 外键约束不支持自动创建索引,需要手动建立.• 表中最多可以使用31 个外键约束。• 临时表中不能建立外键约束.• 主键和外键的数据类型必须严格匹配。

4.5经典习题与面试题

除在数据库关系表中定义基本表的结构和编排方式外, SQL 语言还提供了一种数据组织方法, 可以按其他组织形式对原来表中的数据进行重新组织, 这种方法就是视图。与表一样,视图包含一系列带有名称的列和行数据。视图在数据库中并不是以数据值存储集形式存在的, 行和列数据来自于由定义视图的查询所引用的表, 并且在引用视闯时动态生成。本章重点内容:• 了解操作视图的基本概念及优缺点• 掌握使用管理器创建、查看、删除视图• 会使用视图操作数据

视图是一个虚拟表, 其内容由查询定义。对其中所引用的基础表来说,视图的作用类似于筛选.定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储不同地区的数据, 而我们需要将这些服务器上结构相似的数据组合起来, 这种方式就很有用。          视国的结构和内容是通过SQL 查询获得的,也称之为视图名, 可以永久地保存在数据库中。用户通过SQL 查询语旬,可以像其他普通关系表一样, 对视闺中的数据进行查询。视图可以被看成是虚拟表或存储查询, 可通过视图访问的数据不作为独特的对象存储在数据库内。          视图在数据库内存储的是SELECT 语旬,即数据库内并没有存储视图这个表,而存储的是视图的定义。SELECT 语旬的结果集构成视图所返回的虚拟表。用尸可以用引用表时所使用的方法在SQL 语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:   (1 )将用户限定在表中的特定行上。例如,只允许雇员看见工作跟踪表内记录其工作的行。( 2 ) 将用户限定在特定列上。例如,对于那些不负责处理工资单的雇员, 只允许其看见雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信息的列。(3)将多个表中的列连接起来, 使它们看起来像一个表。( 4 ) 聚合信息而非提供详细信息。例如,显示一个列的和,或列的最大值和最小值。

当数据库管理系统DBMS 在SQL 语句中遇到视图引用时,会从数据库中找出所存储的相应视图的定义,然后把对视图的引用转换成对构成视图源表的等价请求,并且执行这个等价请求。利用这种方法, DBMS 在保持源表数据完整性的同时也保持了视图的"可见性"。         对于简单视图, DBMS 通过快速查询直接从源表中提取并构造出视图的每一行。而对于一些比较复杂的视图, DBMS 则要根据该视图定义中的查询语句进行查询操作,并将结果存储到一个临时表中。然后DBMS 再从这个临时表中提取数据以满足对视图操作的需要, 并在不需要的时候抛弃所生成的临时表。但不论DBMS 如何操作,对用户来讲,其结果都是相同的, 即这个视图能够在SQL 语句中引用, 就好像其是一张真正的关系表一样。        通过定义SELECT 语旬以检索将在视图中显示的数据来创建视图。SELECT 语句引用的数据表称为视图的基表。视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据, 而不授予用户直接访问视图基础表的权限。视图可用于提供向后兼容接口来模拟曾经存在但其架构己更改的表。还可以在向SQLServer 复制数据和从其中复制数据时使用视图,以便提高性能并对数据进行分区。

在数据库中使用视图有很多优点, 尤其是在定义用户使用的数据库结构和增强数据库的安全保密性方面,视图起了准则作用。使用视图的主要优点是:(1) 安全保密性。通过视图,用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。(2) 查询简单性。视图能够从儿个不同的关系表中提取数据,并且用一个单表表示出来,利用视图将多表查询转换成视图的单表查询。(3)结构简单性。视图能够给用户一个"个人化"的数据库结构外观,用一组用户感兴趣的可见表来代表这个数据库的内容。( 4 ) 隔离变化。视图能够代表一个个一致的、非变化的数据。即使是在作为视图基础的源表被分隔、重新构造或者重新命名的情况下,也是如此。(5) 数据完整性。如果数据被存取,并通过视图来输入, DBMS 就能够自动地校验这个数据,以便确保数据满足所规定的完整性约束。(6) 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上, 从而使程序与数据库表被视图分隔开来。虽然视图存在上述的优点,但是在定义数据库对象时不能不加选择地来定义视图,因为视图也存在一些缺点,主要如下:

虽然视图存在上述的优点,但是在定义数据库对象时不能不加选择地来定义视图,因为视图也存在一些缺点,主要如下:(1)性能。数据库管理系统必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义的,那么即使是对视图的一个简单查询,数据库管理系统也会将其变成一个复杂的结合体,需要花费一定的时间。(2) 修改限制。当用户试图修改视图的某些记录行时,数据库管理系统必须将其转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是对于比较复杂的视图,可能是不可修改的。

用户可以使用SQL Server Management Studio 或T-SQL 在SQLSe凹er 20 1 6 中创建视图,将视图用于以下用途:(1)集中、简化和自定义每个用户对数据库的认识。(2) 用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问底层基表的权限。(3)提供向后兼容接口来模拟架构己更改的表。

在数据库中创建了一个或者多个表之后, 就可以创建视图了, 可以使用视图这种数据库对象以指定的方式查询一个或者多个表中的数据。(1)限制和局限:只能在当前数据库中创建视图,视图最多可以包含1024 列。(2) 权限:要求在数据库中具有CREATEVIEW 权限,并具有在其中创建视图的架构的ALTER 权限。使用查询和视图设计器创建视图的步骤如下:

1 . 查询和视图设计器工具        当打开视图的定义、显示查询或视图的结果或者创建或打开查询时,查询和视图设计器将会打开。它由4 个不同的窗格组成:(1) 【关系图】窗格以图形形式显示通过数据连接选择的表或表值对象, 同时也会显示它们之间的连接关系。(2) 【条件】窗格用于指定查询选项(例如要显示哪些数据列、如何对结果进行排序,以及选择哪些行等) , 可以通过将选择输入到一个类似电子表格的网格中来进行指定。(3)用户可以使用SQL 窗格创建自己的SQL 语旬, 也可以使用【条件】窗格和【关系图】窗格创建语旬,在后面这种情况下将在SQL 窗格中相应地创建SQL 语句。生成查询时,SQL 窗格将自动更新并重新设置格式以便于阅读。( 4 ) 【结果】窗格显示最近执行的选择查询的结果。

这些窗格对于处理查询和视图非常有用。当用户打开一个视图或查询时,以上部分或全部窗格将随之打开。所打开的窗格取决于【选项】对话框中的设置以及用户所连接的数据库管理系统,默认设置是4 个窗格全都打开。在对象资源管理器中, 右击要打开的视图,然后单击【设计】菜单项或【打开视图】菜单项即可打开视图, 如图5.6 所示。

2. 【关系圄】窗格【关系图】窗格以图形形式显示用户通过数据连接选择的表或表值对象, 同时也会显示它们之间的连接关系。在【关系图】窗格中可以进行的操作包括添加或移除表和表值对象, 并指定要输出的数据列和创建或修改表和表值对象之间的连接。

当在【关系图】窗格中进行更改时, 【条件】窗格和SQL 窗格会自动更新以反映所做的更改。例如, 如果在【关系图】窗格内的表或表值对象窗口中选择某个要输出的列, 查询和视图设计器会将该数据列添加到【条件】窗格中以及SQL 窗格内的SQL 语句中。         每个表或表值对象在【关系图】窗格中均作为单独的窗口出现。每个矩形的标题栏中的图标表示该矩形所代表的对象类型, 如表5 .1所示。

(1)表         列出可以添加到【关系图】窗格中的表。若要添加某个衰, 则选择该表, 再单击【添加】菜单项。若要同时添加多个表, 可以先选择这些表, 再单击【添加】菜单项。(2) 视图        列出可以添加到【关系图】窗格中的视图。若要添加某个视图, 则选择该视图, 再单击【添加】菜单项。若要同时添加多个视图, 可以先选择这些视图, 再单击【添加】命令。(3)函数      列出可以添加到【关系图】窗格中的用户定义的函数。若要添加某个函数, 则选择该函数,再单击【添加】命令。若要同时添加多个函数, 可以先选定这些函数, 再单击【添加】命令。( 4 ) 本地表     列出由查询创建的表而不是数据库中的表。( 5 ) 同义词     列出可以添加到【关系图】窗格中的同义词。若要添加某个同义词,则选择该同义词, 再单击【添加】命令。若要同时添加多个同义词,可以先选择这些同义词, 再单击【添加】命令。

连接线中间的图标形状指示表或表结构对象的连接方式。若连接子句使用等于( =)以外的运算符, 则该运算符将显示在连接线图标中。在连接线中显示的图标如表5 .2所示。

3. 【条件】窗格        【条件】窗格用于指定查询选项(例如要显示哪些数据列、如何对结果进行排序以及选择哪些行等) , 可以通过将选择输入到一个类似电子表格的网格中来进行指定。在【条件】窗格中,可以指定:• 要显示的列以及列名别名.• 要显示的所属的表.• 计算列的表达式。• 查询的排序顺序.• 搜索条件。• 分组条件,包括用于摘要报告的聚合函数.• UPDATE 或的INSERT 剧TO 查询的新值。• INSERTFROM 查询的目标列名.在【条件】窗格中所做的更改将自动反映到【关系图】窗格和SQL 窗格中。同样, 【条件】窗格也会自动更新以反映在其他窗格中所做的更改。

5. 【结果】窗格【结果】窗格显示最近执行的SELECT 查询的结果(其他查询类型的结果在消息框中显示)。若要打开【结果】窗格,可以打开或创建一个查询或视图,或者返回某个表的数据。如果默认情况下不显示【结果】窗格,可以在【查询设计器】菜单中指向【窗格) ,再单击【结果】命令。用户可以在【结果】窗格中执行的操作如下:(1)在类似于电子表格的网格中查看最近执行的SELECT 查询的结果集。(2) 对于显示单个表或视图中的数据的查询或视图,可以编辑结果集中各个列的值、添加新行以及删除现有的行。

使用SQL 编辑器可以编辑现有的存储过程、函数、触发器和SQL 脚本。当用户打开上述任何对象时,此窗口将打开。若要创建要对数据源运行的新的SQL 语旬,可以使用查询设计器的SQL 窗格。SQL 编辑器提供了许多有用的SQL 文本编辑功能,包括:(1)对SQL 关键字进行颜色编码, 以最大限度地减少语法和拼写错误。(2) 生成主干存储过程和触发器。(3)提供有用的编辑功能,包括剪切、复制、粘贴和拖动操作。(4) 更改编辑器的行为(通过在【工具】菜单中选择【选项】)以修改虚空格、自动换行、行号和制表符大小。(5) 帮助管理调试断点。7. 获取有关视图的信息在SQL Se凹er 2016 中,通过使用SQL Server Management Studio 或T-SQL 可以获取有关视图的定义或属性的信息。

(1)使用对象资源管理器获取视图属性使用对象资源管理器获取视图属性的步骤为:在【对象资源管理器】中,单击包含要查看属性的视图的数据库旁边的加号,单击加号以展开【视图】文件夹, 然后右击要查看其属性的视图, 选择【属性】菜单项,打开如图5 .7 所示的【视图属性】对话框。

【视图属性】对话框中显示以下属性。• 服务器:当前服务器实例的名称.• 数据库:包含此视图的数据库的名称.• 用户:此,连接的用户名。• Schema: 显示视,困所属的架构.• 创建日期:显示视,图的创建日期.• 名称:当前视图的名称。• 系统对象:指示视,因是否为系统对象,值为True 和False .• ANSl NULL: 指示创建对象时是否选择了ANSl NULL 选项.• 带引号的标识符:指示创建对象时是否选择了【带引号的标识符】选项.• 架构已绑定:指示视图是否绑定到架构,值为True 和False 。• 己加密:指示视,图是否已加密,值为True 和False .

(2) 使用视图设计器工具获取视图属性①在【对象资源管理器】中,展开包含要查看属性的视图的数据库,然后展开【视图】文件夹。②右击要查看其属性的视图,然后选择【设计】菜单项。

③右击【关系图】窗格中的空白区域,再单击【属性】命令,出现如图5 . 8 所示的【属性】窗格。

【属性】窗格中显示以下属性。

> Top: 指定视,图将包括TOP 于句,该于句只返回结果集中的前n 行或前百分之n行。默认情况下,视图将在结果集中返回前10 行。使用此,项可更改返回的行数或指定不同的百分比.

> 表达式:显示视图将返回的百分比(如果"百分比"设直为"是"果"百分比"设直为"否" ) .        >百分比:指定查询将包含一个TOP 子句,仅返回结果集中前百分之n 行。        >等同值:指定视图将包括WITHTIES 于句。如果视图包含ORDERBY 子句和基于百分比的TOP 于句, WITH TIES 将非常有用. 若设直了该选项,并且百分比截止住直在一组行的中间,且这些行在ORDER BY 子句中具有相同的佳,贝1)视图将会扩展,以包含所有这样的行。

当一个视图不再需要时,可以将其从数据库中删除, 以回收当前使用的磁盘空间。这样数据库中的任何对象都可以使用此回收空间。(1)限制和局限: 删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息。还将删除视图的所有权限。使用DROP TABLE 删除的表上的任何视图都必须使用DROPVIEW 显式删除。(2) 权限: 需要有对SCHEMA 的ALTER 权限或对OBJECT 的CONTROL 权限。

从数据库中删除视图的步骤如下:

由于视图是一张虚表, 对视图的更新最终实际上是转换成对视图的基本表的更新, 因此可以通过更新视图的方式实现对表中数据的更新。视图的更新操作包括插入、修改和删除数据,可以使用SQL Server Management Studio 或T-SQL 在SQL Server 2016 中修改基础表的数据。

在通过视图插入数据时,必须保证未显示的列有值,该值可以是默认值或NULL 值。假设在饭blel 上创建了一个视图, tablel 有cl 、c2 和c3 三列,视图创建在cl 和c2 上。那么,通过视图对table l 插入数据时,必须保证c3 有值(可以是默认值或NULL 值) ,否则不能向视图中插入行。具体来说, 在视图中插入数据记录,其实质是向构成视图的基本表中插入数据, 具体操作步骤如下:

本章就视图做了概要介绍,首先简要介绍了其基本概念、类型和优缺点,然后重点讲解了如何使用管理器管理视图,包括创建新视图、查看视图信息、创建基于视图的视图及删除视图,最后演示了在视图中插入、修改和删除表数据。学习本章要注意视图的操作与基本表的操作之间的相似和不同之处。

5.4小结

5.5 经典习题与面试题

SQL Server 2016 数据库的管理主要包括脱机与联机数据库、分离和附加数据库、导入导出数据、备份和恢复数据库、收缩数据库和文件以及生戚与执行SQL 脚本等操作。这些操作都可以通过SQL Server Managernent Studio 工具来完成。      Managernent Studio 工具有一个图形用户界面,用于创建数据库和数据库中的对象。Management Stud io 还具有一个查询编辑器,用于通过编写下SQL 语句与数据库进行交互。Management studio 可以从SQL Server 安装磁盘进行安装,也可以从MSDN 中下载。本章主要讲解如何使用SQL Server Management Studio 维护管理数据库。本章重点内容:• 掌握脱机数据库和联机数据库• 掌握分离数据库和附加数据库• 会导入导出数据• 会备份和恢复数据库• 掌握收缩数据库和文件• 掌握生成与执行SQL 脚本

脱机与联机是针对数据库的当前状态来说的, 当一个数据库处于可操作、可查询的状态时就是联机状态, 而一个数据库尽管可以看到其名字出现在数据库节点中, 但对其不能执行任何有效的数据库操作时就是脱机状态。        脱机和联机数据库到底有什么意义呢?在数据库管理及软件开发过程中经常会出现对当前数据库进行迁移的操作, 而在联机状态下, SQL Se凹erMan艳ement Studio 工具是不允许复制数据库文件的。例如, 把当前开发版本的数据库同步到产品版本的数据库, 就可以通过这种操作完成, 而通过可视化命令则是非常便捷的方式之一。      当在数据库复制过程中需要暂停当前的联机数据库时, 就可以通过右击, 选择快捷菜单中的【任务】| 【脱机】命令来完成, 如图6. 1 所示。

完成对脱机状态的数据库复制后,要将其恢复为可用状态,可以右击,通过【任务】| 【联机】命令来完成。图6.2 展示如何使用【联机】命令来实现数据库联机。

如果要将数据库更改到同一计算机的不同SQL Server 实例或要移动数据库,分离和附加数据库会很有用。用户可以分离数据库的数据和事务日志文件,然后将它们重新附加到同一或其他SQLServer 实例。         在64 位和32 位环境中, SQLSe凹er 磁盘存储格式均相同。因此,可以将32 位环境中的数据库附加到64 位环境中,反之亦然。从运行在某个环境中的服务器实例上分离的数据库可以附加到运行在另一个环境中的服务器实例。

分离数据库是指将数据库从SQL Server 实例中删除, 但使数据库在其数据文件和事务日志文件中保持不变。之后,就可以使用这些文件将数据库附加到任何SQL Server 实例,包括分离该数据库的服务器。如果存在下列任何情况,就不能分离数据库。( 1 ) 己复制并发布的数据库。如果进行复制,数据库就必须是未发布的。必须通过运行sp_replic创iondboption 禁用发布后,才能分离数据库。(2) 数据库中存在数据库快照。必须首先删除所有数据库快照,然后才能分离数据库。

(3)该数据库正在某个数据库镜像会话中进行镜像。除非终止该会话,否则无法分离该数据库。(4) 数据库处于可疑状态。( 5) 该数据库是系统数据库。确定了能够分离数据库后,用户可以通过SQL Se凹erMan唔ement Studio 进行分离,其具体操作步骤如下。

通过SQL Server Management Studio ,用户同样可以附加复制的或分离的SQLServer 数据库。例如,当将包含全文目录文件的SQL Server 2005 数据库附加到SQL Server 20 1 6 服务器实例上时, 系统会将目录文件从其以前的位置与其他数据库文件一起附加,这与在SQL Server2005 中的情况相同。

附加日志文件的要求在某些方面取决于数据库是读写的还是只读的。如果读写数据库具有单个日志文件,并且没有为该日志文件指定新位置,附加操作将在旧位置中查找该文件。如果找到了旧日志文件,无论数据库上次是否完全关闭,都将使用该文件。但是,若来找到旧文件日志,数据库上次是完全关闭且现在没有活动日志链,则附加操作将尝试为数据库创建新的日志文件。        反之,若附加的主数据文件是只读的,则数据库引擎假定数据库也是只读的。对于只读数据库,日志文件在数据库主文件中指定的位置上必须可用。因为SQL Server 2016 无法更新主文件中存储的日志位置,所以无法生成新的日志文件。      从上述内容可以看出, 用户试图附加SQLSe凹er 2016 数据库前,必须具备一定的先决条件,具体如下:(1)必须首先分离数据库。任何尝试附加未分离的数据库都将返回错误。

( 2 ) 附加数据库时,所有数据文件( MDF 文件和LDF 文件) 都必须可用。若任何数据文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。(3 )在附加数据库时,如果MDF 和四F 文件位于不同目录并且其中一条路径包含\\?\GlobalRoot,该操作将失败。具备了如上先决条件后,用户就可以开始附加数据库到指定目标上了,其具体操作步骤如下:

导入导出数据也是数据库操作中使用频繁的功能。SQL Server 20 1 6 的导入和导出向导可以将数据复制到提供托管NET Frarnework 数据访问接口或本机OLEDB 访问接口的任何数据源,也可以从这些数据源复制数据。        用户可以访问接口的列表,数据源包括SQL Server、平面文件、Microso负Office Access、Microso负Office Excel 。若要成功完成SQL Server 导入和导出向导,则必须至少具有下列权限:(1 )连接到源数据库和目标数据库或文件共辜的权限。该权限在Integration Services 中,需要服务器和数据库的登录权限。

(2) 从源数据库或文件中读取数据的权限。在SQL Se凹er 2016 中,这需要对源表和视图具有SELECT 权限。

(3)向目标数据库或文件写入数据的权限。在SQL Se凹er 2016 中,这需要对目标表具有剧SERT 权限。( 4 ) 如果希望创建新的目标数据库、表或文件,就需要具有创建新的数据库、表或文件的足够权限。在SQL Server 20 1 6 中,需要具有CREATE DATAB AS E 或CRE ATE TABLE权限。( 5 ) 如果希望保存向导创建的包,就需要具有向msdb 系统或文件系统进行写入操作的足够权限。

导入其他数据源的数据与6 .3 .1 节中的过程相似, 在选择数据源的步骤中选择不同的数据源,比如导入Excel 数据, 就在数据源选项中选择Microsoft Excel,如图6.10 所示。其他数据源同样在数据源下拉列表中选择。

SQL Server 20 16 中导出数据功能跟导入数据相似,该功能实现将SQLSe凹er 201 6 中的数据导出为指定格式,其具体操作步骤如下:

在一些对数据可靠性要求很高的行业(如银行、证券、电信等) ,如果发生意外停机或数据丢失, 其损失会十分惨重。为此,数据库管理员应针对具体的业务要求制定详细的数据库备份与灾难恢复策略, 并通过模拟故障对每种可能的情况进行严格测试,只有这样才能保证数据的高可用性。数据库的备份是一个长期的过程,而恢复只在发生事故后进行,恢复可以看作是备份的逆过程,恢复程度的好坏很大程度上依赖于备份的情况。此外,数据库管理员在恢复时采取的步骤正确与否也直接影响最终的恢复结果。

备份数据库是指对数据库或事务日志进行复制,当系统、磁盘或数据库文件损坏时, 可以使用备份文件进行恢复,防止数据丢失。SQLSe凹er 数据库备份支持以下几种类型,分别应用于不同的场合, 下面简要介绍。(1 )仅复制备份( Copy-Only Backup)独立于正常SQL Server 备份序列的特殊用途备份。(2) 数据备份( Data Backup)完整数据库的数据备份(数据库备份) 、部分数据库的数据备份(部分备份)或一组数据文件或文件组的备份(文件备份〉。(3)数据库备份( Database Backup)数据库的备份。完整数据库备份表示备份完成时的整个数据库。差异数据库备份只包含自最近完整备份以来对数据库所做的更改。

( 4 ) 差异备份( Differential Backup)基于完整数据库或部分数据库以及一组数据文件或文件组的最新完整备份的数据备份( {( 差异基准" ) ,仅包含自差异基准以来发生了更改的数据区。部分差异备份仅记录自上一次部分备份(称为" 差异基准" )以来文件组中发生更改的数据区。( 5 ) 完整备份( Full Backup)一种数据备份,包含特定数据库或者一组特定的文件组或文件中的所有数据,以及可以恢复这些数据的足够的日志。(6) 日志备份( Log Backup)包括以前日志备份中未备份的所有日志记录的事务日志备份, 完整恢复模式。( 7 ) 文件备份( File Backup)一个或多个数据库文件或文件组的备份。(8) 部分备份( Partial Backup)仅包含数据库中部分文件组的数据(包含主要文件组、每个读/写文件组以及任何可选指定的只读文件中的数据〉。

恢复模式旨在控制事务日志维护, 提供给用户选择。SQL Server 20 1 6 有3 种恢复模式:简单恢复模式、完全恢复模式和大容量日志恢复模式。通常,数据库使用完全恢复模式或简单恢复模式。

(1)简单恢复模式        简单恢复模式可以最大限度地减少事务日志的管理开销,因为它不备份事务日志。若数据库损坏,则简单恢复模式将面临极大的工作丢失风险。数据只能恢复到己丢失数据的最新备份。此, 在简单恢复模式下, 备份间隔应尽可能短, 以防止大量丢失数据。但是,间隔的长度应该足以避免备份开销影响生产工作。在备份策略中加入差异备份可有助于减少开销。       通常,对于用户数据库,简单恢复模式用于测试和开发数据库,或用于主要包含只读数据的数据库(如数据仓库)。简单恢复模式并不适合生产系统,因为对生产系统而言,丢失最新的更改是无法接受的,在这种情况下建议使用完全恢复模式。(2) 完全恢复模式和大容量日志恢复模式        相对于简单恢复模式而言, 完全恢复模式和大容量日志恢复模式提供了更强的数据保护功能。这些恢复模式基于备份事务日志来提供完整的可恢复性及在最大范围的故障情形内防止丢失工作。

①完全恢复模式       完全恢复模式需要日志备份。此模式完整记录所有事务, 并将事务日志记录保留到对其备份完毕为止。如果能够在出现故障后备份日志尾部,就可以使用完全恢复模式将数据库恢复到故障点。完全恢复模式也支持还原单个数据页。      ②大容量日志恢复模式      大容量日志记录大多数大容量;操作, 它只用作完全恢复模式的附加模式。对于某些大规模大容量操作(如大容量导入或索引创建) , 暂时切换到大容量日志恢复模式可提高性能并减少日志空间使用量。与完全恢复模式相同,大容量日志恢复模式也将事务日志记录保留到对其备份完毕为止。

为方使用户, SQL Server 20 1 6 支持用户在数据库在线并且正在使用时进行备份。但是,存在下列限制:(1 )无法备份脱机数据。

隐式或显式引用脱机数据的任何备份操作都会失败。通常, 即使一个或多个数据文件不可用,日志备份也会成功。

(2) 备份过程中的并发限制。

数据库仍在使用时, SQL Server 可以使用联机备份过程来备份数据库。在备份过程中,可以进行多个操作。例如,在执行备份操作期间允许使用剧SERT、UPDATE 或DELEfE 语句。但是, 若在正在创建或删除数据库文件时尝试启动备份操作,则备份操作将等待, 直到创建或删除操作完成或者备份超时。如果备份操作与文件管理操作或收缩操作重叠,就会产生冲突。无论哪个冲突操作首先开始,第二个操作总会等待第一个操作设置的锁超时(超时期限由会话超时设置控制) 。如果在超时期限内释放锁,第二个操作将继续执行。若锁超时,则第二个操作失败。一般来说, 在SQL Server 2016 中可以通过SQL Server Management Studio 工具实现备份,其主要操作流程如下:

数据库完整还原的目的是还原整个数据库。整个数据库在还原期间处于脱机状态。在数据库的任何部分变为联机之前, 必须将所有数据恢复到同一点,即数据库的所有部分都处于同一时间点并且不存在未提交的事务。在简单恢复模式下,数据库不能还原到特定备份中的特定时间点。      在完整恢复模式下, 还原数据备份之后,必须还原所有后续的事务日志备份,然后恢复数据库。我们可以将数据库还原到这些日志备份之一的特定恢复点。恢复点可以是特定的日期和时间、标记的事务或日志序列号。还原数据库时,特别是在完整恢复模式或大容量日志恢复模式下,应使用一个还原顺序。

与备份数据库类似,用户可以通过SQL 如何er Management Studio 工具的对象资源管理器来实现恢复数据库,其主要操作流程如下:

当数据库随着使用时间而越来越大时,可以考虑对数据库进行收缩操作。收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的来占用的空间来恢复空间,在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。

SQL Server 20 16 支持系统自动收缩数据库和用户手动收缩数据库这两种方式。为提高数据库的使用空间, SQL Se凹er 2016 会寻找可用的数据库并找出第一个配置为自动收缩的数据库,它将检查该数据库,并在需要时收缩该数据库。待一个数据库收缩完成后,系统会等待几分钟再检查下一个配置为自动收缩的数据库。换句话说, SQL Server 不会同时检查所有数据库,也不会同时收缩所有数据库。它将以循环方式处理各个数据库,以便负载在时间上错开。如果用户需要SQL Server 20 16 系统自动对数据库进行收缩,只需为该数据库设置自动收缩功能即可,其操作方式为:右击选择的数据库,选择【属性】| 【选项】菜单项, 在弹出的数据库属性界面中设置自动收缩为True,如图6.18 所示。

除了自动收缩外,用户也可以手动对指定的数据库进行收缩。但手动收缩数据库有一定的限制和局限,主要表现在如下儿方面:(1)收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定的大小,或者上一次使用文件大小更改操作(如DBCC SHR剧KFILE ) 设置的大小。例如,若数据库最初创建时的大小为10MB ,后来增长到100 MB ,则该数据库最小只能收缩到10MB ,即使己经删除数据库的所有数据也是如此。(2) 不能在备份数据库时收缩数据库。反之,也不能在数据库执行收缩操作时备份数据库。(3)遇到内存优化的列存储索引时, DBCC SHR剧KDATABASE 操作将会失败。遇到columnstore 索引之前完成的工作将会成功,因此数据库可能会较小。若要完成DBCCSHR剧KDATABASE,则需要在执行DBCCS~ATABASE 前禁用所有列存储索引,然后重新生成列存储索引。手动收缩数据库可以在SQL Server Management Studio 工具的对象资源管理器中完成,其具体实现步骤如下:

在收缩数据库界面展示的是数据库xsxk 的基本信息,如果需要进行收缩操作, 需要首先选中【在释放未使用的空间前重新组织文件。选中此选项可能会影响性能(R) o 】复选框, 然后在【收缩后文件中的最大可用空间1 中选择收缩后的空间。然后单击【确定】按钮即可。

本节主要讲解将数据库生成SQL 脚本、将数据表生成SQL 脚本及执行SQL 脚本3 方面的操作过程

使用对象资源管理器可以快速创建整个数据库的脚本,也可以使用默认选项创建单个数据库对象的脚本。用户可以在查询编辑器窗口中对文件或剪贴板创建脚本,脚本以Unicode 格式创建。用户也可以创建用于创建或删除对象的脚本。有些对象类型具有其他脚本选项, 如ALTER、SELECT、剧SERT... UPDATE、DELETE 和EXECUTE 操作。      有时可能需要使用具有多个选项的脚本,如删除一个过程然后创建一个过程, 或者创建一个表然后更改一个表。若要创建组合的脚本,可将第一个脚本保存到查询编辑器窗口中, 并将第二个脚本保存到剪贴板上, 这样就可以在窗口中将第二个脚本粘贴到第一个脚本之后。为某个对象编写脚本的步骤如下。

SQLServer 同样也支持将数据表生成SQL 脚本。在数据库中选择数据表并右击,选择【编写表脚本为】菜单项,有常用的SQL 脚本,包括C阻ATE、DROP 、SELECT、剧SERT、UPDATE和DELETE , 并且可以将脚本直接生成到查询分析器、文件、剪贴板等,如图6.22 所示。

SQL 脚本的执行一般需要在查询分析器中完成。查询分析器是一个图形化的数据库编程接口,是SQL Server 客户端的重要组成部分。查询分析器以自由的文本格式编辑SQL 代码,对语法中的保留字提供彩色显示,方便开发人员使用。在SQL Server 2016 中,查询分析器是一个功能非常强大的图形工具, 可以进行以下操作:(1)创建查询和其他SQL 脚本, 并针对SQLServer 数据库执行它们。(2) 由预定义脚本快速创建常用数据库对象。(3)快速复制现有数据库对象。( 4 ) 在参数未知的情况下执行存储过程。( 5 ) 调试存储过程。(6) 调试查询性能问题。( 7 ) 在数据库内定位对象(对象搜索功能) ,或查看和使用对象。(8) 快速插入、更新或删除表中的行。(9) 为常用查询创建键盘快捷方式。(1 0 ) 向【工具】菜单添加常用命令。

以执行SQL 脚本操作为例,使用查询分析器执行SQL 脚本需要通过以下步骤来实现:

数据库管理是数据库管理员和普通用户操作数据库的入门操作,需要重点掌握。该章主要介绍SQLSe凹er 2016 数据库的维护管理,包括脱机与联机数据库、分离和附加数据库、导入导出数据、备份和恢复数据库、收缩数据库和文件以及生戚与执行SQL 脚本。读者要特别注意这些操作的先决条件和限制。通过本章的学习,要能够对数据库和数据表有一个系统的维护概念,并能够实施维护策略。

6.8 经典习题与面试题

SQL Server 2016 是一个庞大的数据库系统,安装完成之后需要对数据库服务器做相应的设置来保证服务器能够正常安全地运行。很多读者安装完SQL Server 20 1 6 后,在使用过程中会遇到问题, 为了更好地了解SQL Server 2016,本章将介绍如何启动SQL Server 服务、注册SQL Se凹er 服务器以及SQL Server 数据库服务器的安全性设置。本章重点内容:• 了解启动SQL Server 服务的多种方式• 掌握注册SQL Server 2016 的方法• 了解数据库安全的相关概念• 掌握SQL Server 20 1 6 安全策略

数据库的管理和维护主要是指为了使业务系统能够高效稳定地运行,对数据库系统进行可靠性、安全性、扩张性方面的设置。SQL se凹er 2016 数据库的管理和维护工作是一个复杂的过程,包含多种数据库的备份与恢复技术、服务器管理技术、高可用性技术等。通过使用规范、一致的数据库管理运维方案,能给系统带来以下优点:• 减轻数据库管理人员( DBA) 的工作复杂度,使他们可以很容易地从一个数据库系统的管理维护转移到新数据库系统的维护.• 可以大幅加快数据库管理维护相关脚本或者设置的部署时间,尤其在维护庞大的数据库系统时.• 可以有效地实现团队协作,在大规A莫的数据库系统环境中通常委有一个DBA 团队进行数据库系统的管理维护,通过使用统一的标准,可以轻松实现协作工作.• 可以有效地节省数据库系统剥问苦时间,通过使用统一的数据库监控和恢复标准,可以迅速定位故障,并为处理错误节约时间,这在24*7 ( 24*7 表示不间断执行的数据库,即每周工作7 天,每天工作24 小时)的数据库系统中尤其有用.

SQL Server 2016 允许用户创建服务器组,将多个服务器放在组中进行统一的配置和管理。服务器组是一个逻辑上的概念,类似于将QQ 中的好友进行分组。当服务器较多的时候, 可以使用服务器组来进行组织管理。

数据库服务器是所有应用的数据中转站,如果数据库服务器被恶意攻击,很有可能造成数据地露、数据丢失、数据被恶意篡改等诸多无法挽回的损失。因此,对数据库进行安全性设置是每一个数据管理人员都应该掌握的知识。本节将从更改用户验证方式、设置权限、管理角色、密码策略等方面对数据库服务器进行设置。

SQLServer 2016 登录模式分为"Windows 身份验证模式"和"SQL Server 和Windows 身份验证模式"两种,若在安装SQL Server 时选择的是"Windows 身份验证模式" ,则sa 登录账户被禁用;若想开启sa 账户,则可以使用ALTERLOGIN 语句。        sa 账户是SQL Se凹er 中一个广为人知的账户,也是经常被攻击的主要目标。若应用程序需要使用sa 账户,则应在使用前为sa 更换一个复杂的密码并按时更换密码,否则不推荐启用该账户。在SQLSe凹er 中更换登录用户验证方式的操作步骤如下:

在SQL Server 中可以创建多个登录用户来访问数据库服务器, SQL Server 可以对创建的登录用户做严格的设置来控制账户的访问权限、密码策略等。下面介绍如何在SQLServer 2016中创建新的登录用户。

当儿个用户需要在某个特定的数据库中执行类似的动作时(此处没有相应的Windows 用户组) ,可以向该数据库中添加一个角色Crole) 。数据库角色指定了可以访问相同数据库对象的一组数据库用户。      固定服务器角色已经具备了执行指定操作的权限,可以把其他登录名作为成员添加到固定服务器角色中,这样该登录名就可以继承固定服务器角色的权限了。在SQL Server 2016 中默认的服务器角色如图7.29 所示。

• bulkadmin: 这个服务器角色的成员可以运行BULK 1NSERT 语句。这条语句允许从文本文件中将数据导入SQL Se凹er 2016 数据库中,为需要执行大容量插入数据库的域账户而设计。• dbcreator: 这个服务器角色的成员可以创建、更改、删除和还原任何数据库。这既是适合助理DBA 的角色,也可能是适合开发人员的角色.• diskadmin: 这个服务器角色用于管理磁盘文件,比如镜像数据库和添加备份设备。它适合助理DBA.• pr∞essadmin: SQL Server 2016 能够多任务化,也就是说可以通过执行多个进程做多个事件。例如, SQL Se凹er 2016 可以生成一个进程,用于向高速援存写数据,同时也可以生成另一个进程,用于从高速缓存中读取数据。这个角色的成员可以结束(在SQL Se凹er 2008 中称为删除)进程。• securityadmin: 这个服务器角色的成员将管理登录名及其属性。他们可以授权、拒绝和撤销服务器级权限,也可以授权、拒绝和撤销数据库级权限.另外,它们可以重直SQL Server 2016 登录名的密码。

• serveradmin: 这个服务器角色的成员可以更改服务器范围的配直选项和关闭服务器.例如, SQL Server 2016 可以使用多大内存或监视,通过网络发送多少信息,或者关闭服务器,这个角色可以减轻管理员的一些管理负担.• seωpa缸1m: 为需要管理链接服务器和控制启动的存储过程的用户而设计.这个角色的成员能添加到setupadrnin,能增加、删除和配置链接服务器,并能控制启动过程.• sysadrnin: 这个服务器角色的成员有权在SQL Se凹er 20 1 6 中执行任何任务.• pub1ic:有两大特点,一是初始状态时没有权限,二是所有的数据库用户都是它的成员。

THE END
0.SQL教程|菜鸟教程SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准化编程语言。 在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等。 在线测试工具:https://www.jyshare.com/front-end/7768/。jvzquC41o0xvpxtd0eun1|vn1uwm/}zvqtobn7mvon
1.sqlserver入门教程sqlserver教程sqlserver 入门教程 1、创建数据库 1)鼠标右键数据库选项,点击新建数据库 2)命名数据库 根据自己业务情况取一个自定义数据库名字,比如:my_database 3)查看数据库 如果添加没看到,那么可鼠标右键数据库刷新,就可以看到如下界面 或者通过命令行创建数据库 jvzquC41dnuh0lxfp0tfv8~knwuicw55295bt}neng5eg}fknu5259527:92
2.SQLServer使用教程初学者必备sqlserver教程SQL Server使用教程_初学者必备 一、编写的目的 很多刚接触 SQLServer的人,在安装完后都会有一个疑问,我怎么去使用SQL Server 呢? 这篇文章就是为初学者量身定制的,让你从初学到入门,分分钟掌握 SQL Server。 二、启动SQL server服务的常用方法 1.方法一:使用cmd命令启动 SQL server服务jvzquC41dnuh0lxfp0tfv8r2a9:94>5;51gsvrhng1jfvjnnu1756;<49:?
3.第1课:连接到数据库引擎入门工具 使用Management Studio 进行连接 授权额外连接 入门工具 SQL Server 数据库引擎附带各种工具。 本文介绍所需的第一个工具,并帮助你为作业选择正确的工具。 所有工具都可以从“开始”菜单上访问。 默认情况下,不会安装某些工具,例如SQL Server Management Studio (SSMS)。 在安装过程中选择要用作组件的工具。jvzquC41fqit0vnetqyph}3eqo5{j6hp1uwm1{jncvoppjq/fczbdjxgu1rfu|tp/33dqwsgevooi6yq/vnf/mfvcdgtg6jpiktf
4.SQLServer入门:零基础学习指南SQL Server入门:零基础学习指南 预览并下载项目源码 本文还有配套的精品资源,点击获取 简介:SQLServer是一款广泛应用于企业级数据管理、分析和存储的关系型数据库管理系统。本课程从基础概念出发,涵盖安装配置、T-SQL语法、数据类型、表操作、数据查询、数据修改、索引管理、视图、存储过程、备份与恢复、安全性、性能优化 jvzquC41dnuh0lxfp0tfv8|gkzooa=7665;458ftvkimg8igvcomu866;7?14;5
5.SQLServer全方位指南:从入门到高级详解本文将分为三大部分,逐步深入SQLServer的基础知识、进阶技巧和高级特性,旨在帮助从初学者到经验丰富的开发人员深入理解和使用SQL Server。 一、入门篇 1.1 什么是SQLServer? SQL Server 是由微软开发的关系型数据库管理系统(RDBMS),广泛应用于企业应用程序和数据分析领域。它提供了丰富的功能,如事务处理、安全性、高可用jvzquC41dnuh0lxfp0tfv8vsa6965>>921gsvrhng1jfvjnnu1754<:39;:
6.教程:数据库引擎入门教程:数据库引擎入门 Microsoft Ignite November 17–21, 2025 立即注册 消除警报 Learn 文档 培训 问答 主题 登录 SQL 概述 Install Secure 发展 管理员 Analyze Reference Troubleshooting 资源 Azure 门户下载 SQL Server 此主题的部分內容可能由机器或 AI 翻译。jvzquC41fqit0vnetqyph}3eqo5{j6hp1uwm1{jncvoppjq/fczbdjxgu1zvvxwkcn3hg}ykpi3tvjwvgf3xk}m/vjk.fjycdcyf/nsikpk
7.SQLServer2022安装图文教程(最新推荐)MsSql到此这篇关于SQLServer2022安装教程的文章就介绍到这了,更多相关SQLServer2022安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 您可能感兴趣的文章: win2008 enterprise R2 x64 中安装SQL server 2008的方法 SQL Server2022数据库安装及配置过程 SQL Server2022版+SSMS下载安装教jvzquC41yy}/lk:30pku1jwvkerf1;=373>/j}r
8.SQLServer数据库应用基础教程黄维通,刘艳民著9787040226041《SQLServer数据库应用基础教程》内容循序渐进,介绍简明实用,所有实例代码都已测试通过。通过实例操作力求使读者掌握SQLServer2005的基本操作和应用。通过本书的学习,读者可以快速掌握数据库的基本应用和操作,并对SQLServer应用有较全面的了解。《SQLServer数据库应用基础教程》适合初学者作为数据库课程的入门教材,也可为广大jvzq<84rtqjve}3o0fgoimfpi0ipo8igvcom3;8387<4292368?6/:3jvor@ojnparoe?9
9.基础篇:数据库SQL入门教程腾讯云开发者社区数据库SQL入门教程主要涵盖哪些内容? 如何通过SQL进行数据查询? 在SQL中如何进行数据的增删改操作? 目录 📚 前言 🌴 SQL 介绍 🌼 什么是 SQL 🌀 SQL 的类型 🌵 学习 SQL 的作用 🍄 数据库是什么 🐥 SQL 基础语言学习 🐤 CREATE TABLE – 创建表 🐑 INSERT – 插入数据 🐼 SELECT – 查询jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk03A>:479
10.SQLServer2012TSQL基础教程sqlserver 2012教程 《SQL Server 2012从零开始学》配书光盘 上传者:bbs591749035时间:2012-12-15 [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版) ☆ 资源说明:☆ [Apress] SQL Server 2012 T-SQL 实用技巧 (英文版) [Apress] SQL Server 2012 T-SQL Recipes (E-Book) jvzquC41yy}/k}j{g0ipo8wguq{sen4jgpzbklz/3637;;:3
11.如何在Windows上安装SQLServer,保姆级教程来了!客户端数据库sqlserver登录 当年上学及第一份工作使用的主要数据库都是SQLSERVER,而现在SQL SERVER已经有很多新版本和特性出来了。部分同学安装时总是出现问题,下面就演示一下安装步骤。 俊才 2024/04/02 1.6K0 SQL server 2017安装教程 expresssqlsql server数据库 由Microsoft公司公布的SQL server是一种典型的关系型jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk04=6424;
12.【亲测能用】SolidWorks免费下载2022【SW2022】附安装教程地址零基础入门学习 共有109+软件教程,简单易学 全部室内设计建筑景观平面设计影视动画常用办公工业产品游戏制作编程开发更多 Stable Diffusion Midjourney MotionGo PS 2021 草图大师2021 PR2020 CAD教程 3dsMax教程 C4D教程 VRay5.0教程 AE2023 AI教程 Rhino教程 jvzquC41yy}/{~yw0et0uxkvjvsm1mtypuugvh<9624ivvq
13.教程:配置SQLServerAlwayson可用性组本文手动配置可用性组环境。 还可以使用Azure 门户、PowerShell 或 Azure CLI,或者Azure 快速入门模板自动完成这些步骤。 估计所需时间:如果满足先决条件,完成本教程大约需要 30 分钟。 先决条件 本教程假设你已基本了解 SQL Server Always On 可用性组。 如需更多信息,请参阅AlwaysjvzquC41nggsp7rketutqoy0eqs0|q2ep1g{w{j1c|{sg6xsn1|jt}zcn/sbeqnpgu5xkwiqyu5bxjnncdomk}~/ituvr6rcpwgmn‚2eqplji~wg/v{uq{ncn/yjppqg/u{cpny
14.教程:将ASP.NET应用与AzureSQL数据库配合使用Azure 应用服务提供高度可缩放、自修复的 Web 托管服务。 本教程演示如何在应用服务中部署数据驱动的 ASP.NET 应用,以及如何将其连接到Azure SQL 数据库。 完成本教程后,ASP.NET 应用连接到 Azure 中运行的 Azure SQL 数据库。 以下示例显示了应用界面。 jvzquC41fqit0jwtg4dp8j/et0cyu/ugxwklj1crv.unwxkek.yng/vwzptrfn/fuupny/usrec}fdcuk