1:书籍下载方式:
SQL Server2016从入门到实战 PDF 下载
链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w
学习视频:https://pan.baidu.comjsjlclBYKtq (密码: pjeb )
本书详细讲解了SQL
Server
2016数据库的基本概念、安装和卸载、创建数据库、操作数据表和视图、T-SQL语言、数据查询、数据操作、存储过程、触发器、索引、游标、SQL函数、事务、性能优化等内容,还讲解了大数据功能和数据库性能提升问题。读者通过本书的学习可以较为全面地掌握SQL
Server 2016数据库管理、开发的方法和技巧。
作者简介
作者:孙亚南
孙亚南,多年数据库研发与教学经验。
目录
第1章
数据库入门 1
数据库是依照某种数据模型组织起来并存放在二级存储器中的数据集合, 可以将其视为电
子化的文件柜。数据库具有不重复、以最优方式提供多种应用服务、数据结构独立于应用程序、
对数据的操作由统一软件进行管理和控制等特点。从数据管理技术的发展历程来看, 数据库是
由文件管理系统发展起来的, 是数据管理的高级阶段。
本章重点内容:
• 了解数据库的发展与组成
• 掌握数据库体系结构
• 掌握数据库的数据模型
• 了解常见的数据库
1.1 数据库系统概述
数据库(DataBase , DB ) 是按照数据结构来组织、存储和管理数据的仓库, 产生于距今
60 多年前. 随着信息技术和市场的发展,特别是20 世纪90 年代以后,数据管理不再仅仅
用于存储和管理数据, 出现了用户所需要的各种数据管理的方式。从简单的存储各种数据的
表格到能够进行海蓝数据存储的大型数据库系统都属于数据库的范畴, 并在各个方面得到了
广泛的应用。
在信息化社会充分有效地管理和利用各类信息资源是进行科学研究和决策管理的前提条
件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,
是进行科学研究和决策管理的重要技术手段。1.1.1
数据库技术的发展使用计算机后,随着数据处理莹的增长,产生了数据管理技术。数据管理技术的发展与计算机
硬件(主要是外部存储器〉、系统软件及计算机应用的范围有着密切的联系。数据管理技术的发展
经历了4 个阶段:人工管理阶段、文件系统阶段、数据库阶段和高级数据库技术阶段。其中,数据
库阶段和高级数据库技术阶段可以统称为系统阶段,即由数据库系统进行管理数据的阶段。1 . 人工管理
20 世纪50 年代中期之前, 计算机的软硬件均不完善。硬件存储设备只有磁带、卡片和纸带,软件方面还没有操作系统,当时的计算机主要用于科学计算。人工管理阶段由于还没有软
件系统对数据进行管理,程序员在程序中不仅要规定数据的逻辑结构,还要设计其物理结构,
包括存储结构、存取方法、输入输出方式等。当数据的物理组织或存储设备改变时,用户程序
就必须重新编制。由于数据的组织面向应用, 不同的计算程序之间不能共享数据, 使得不同的
应用之间存在大量的重复数据,很难维护应用程序之间数据的一致性。这一阶段的主要特征可
归纳为如下几点:
• 计算机中没有支持数据管理的软件.
• 数据组织面向应用,数据不能共享,数据重复。
• 在程序中要规定数据的逻辑结构和物理结构,数据与程序不独立.
• 数据处理方式一--批处理。2 . 文件系统
这一阶段处于20 世纪50 年代中期到60 年代中期,其主要标志是计算机中有了专门管理
数据库的软件一←操作系统。操作系统文件管理功能的出现标志着数据管理步入一个新的
阶段。
在文件系统阶段,数据以文件为单位存储在外存,由操作系统统一管理,而操作系统为用
户使用文件提供友好界面。该阶段中的文件逻辑结构与物理结构脱钩,程序和数据分离,使数
据与程序有了一定的独立性。用户的程序与数据可分别存放在外存储器上,各个应用程序可以
共享一组数据,实现了以文件为单位的数据共享。
由于数据的组织仍然是面向程序的,因此仍存在大量的数据冗余。同时,由于数据的逻辑
结构不能方便地修改和扩充,因此数据逻辑结构的每一点微小改变都会影响应用程序。此外,
由于文件之间互相独立,因此不能反映现实世界中事物之间的联系,而操作系统不负责维护文
件之间的联系信息。如果文件之间有内容上的联系,那么只能由应用程序去处理,这加大了程
序设计人员的工作量。3 . 系统阶段
20 世纪60 年代后,随着计算机在数据管理领域的普遍应用,人们对数据管理技术提出了
更高的要求:希望面向企业或部门,以数据为中心组织数据,减少数据的冗余,提供更高的数
据共享能力,同时要求程序和数据具有较高的独立性,当数据的逻辑结构改变时,不涉及数据
的物理结构,也不影响应用程序,以降低应用程序研制与维护的费用。数据库技术正是在这样
的应用需求基础上发展起来的。
数据管理技术经历了人工管理阶段和文件阶段后,获得了大量的技术积累,这为数据库的
诞生奠定了基础。具体来说,数据库技术有如下特点:
(1)面向企业或部门。数据库以数据为中心进行数据的组织, 形成综合性的数据库,从
而为各应用共享。
(2) 采用一定的数据模型。数据模型不仅描述了数据本身的特点,而且描述了数据之间
的联系。(3)数据冗余小,易修改、易扩充。数据库技术阶段中,不同的应用程序根据处理要求
从数据库中获取需要的数据, 这样就减少了数据的重复存储,也便于增加新的数据结构,便于
维护数据的一致性。
( 4) 程序和数据有较高的独立性。
( 5 ) 具有良好的用户接口,用户可方便地开发和使用数据库。
( 6 ) 对数据进行统一管理和控制,提供了数据的安全性、完整性以及并发控制。
数据管理技术从文件系统发展到数据库系统,这在信息领域中具有里程碑的意义。在文件
系统阶段,人们在信息处理中关注的中心问题是系统功能的设计,因此程序设计占主导地位;
而在数据库阶段,数据开始占据了中心位置, 数据的结构设计成为信息系统首先关心的问题,
而应用程序则以既定的数据结构为基础进行设计。4. 发展趋势
随着信息管理内容的不断扩展, 出现了丰富多样的数据模型(层次模型、网状模型、关系
模型、面向对象模型、半结构化模型等) ,新技术也层出不穷(数据流、Web 数据管理、数
据挖掘等)。每隔几年, 国际上一些资深的数据库专家就会聚集一堂,探讨数据库现状、研究
存在的问题和未来需要关注的新技术焦点。
数据库与学科技术的结合将会建立一系列新数据库,如分布式数据库、并行数据库、知识
库、多媒体数据库等,这将是数据库技术重要的发展方向。未来数据库技术及市场发展的两大
方向是数据仓库和电子商务,数据管理技术将在数据仓库技术以及与之相关的数据挖掘和知识
发现领域持续发展。1.1.2 数据库系统组成
数据库系统( Database System, DBS ) 是指一个具体的数据库管理系统软件和用它建立起
来的数据库,通常由系统软件、数据库和数据管理员组成。系统软件主要包括操作系统、各种
宿主语言、实用程序以及数据库管理系统( DBMS ) ;数据库由数据库管理系统统一管理,数
据的插入、修改和检索均要通过数据库管理系统进行;数据管理员( DBA ) 负责创建、监控
和维护整个数据库,使数据能被任何有权使用的人有效使用,数据库管理员一般由业务水平较
高、资历较深的人员担任。
数据库系统是软件研究领域的一个重要分支,常称为数据库领域。数据库系统是为适应数
据处理的需要而发展起来的一种较为理想的数据处理的核心机构, 具体来说由如下部分组成。
(1)数据库:长期存储在计算机内,有组织、可共享的数据集合。数据库中的数据按一
定的数学模型组织、描述和存储,具有较小的冗余、较高的数据独立性和易扩展性, 并可为各
种用户共享。
(2) 硬件:构成计算机系统的各种物理设备,包括存储所需的外部设备,如物理硬盘、
光盘等媒介。(3)系统软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统( DataBase
Management Sys能m , DBMS ) 是数据库系统的核心软件,在操作系统的支持下工作,是科学
地组织和存储数据、高效获取和维护数据的系统软件。其主要功能包括数据定义、数据操纵、
数据库的运行管理和数据库的建立与维护。
(4) 人员:主要包括如下4 类。
• 第一类为系统分析员和数据库设计人员。系统分析员负责应用系统的需求分析和规范
说明,他们和用户及数据库管理员一起确定系统的硬件配直,并参与数据库系统的概
要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计.
• 第二类为应用程序员,负责编写使用数据库的应用程序。这些应用程序可对数据进行
检索、建立、删除或修改.
• 第三类为最终用户,他们利用系统的接口或查询语言访问数据库。
• 第四类是数据库管理员( Data Base Administrator, DBA) ,负责数据库的总体信息
控制。DBA 的具体职责包括确定数据库中的信息内容和结构,决定数据库的存储结
构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运
行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能.
1.2
数据库体系结构
人们为数据库设计了一个严谨的体系结构, 数据库领域公认的标准结构是三级模式结构,
包括外模式、概念模式和内模式。数据库体系结构能够有效组织、管理数据,提高数据库的逻
辑独立性和物理独立性。1.2.1 什么是模式
虽然实际的数据库管理系统产品种类很多,支持不同的数据模式,使用不同的数据库语言,
建立在不同的操作系统之上,数据的存储结构也各不相同, 但它们在体系结构上通常具有相同
的特征, 即采用三级模式结构并提供两级映像功能。
模式是数据库中全体数据的逻辑结构和特征的描述, 仅仅涉及型的描述, 不涉及具体的值。
模式的一个具体值称为一个实例,同一个模式可以有很多实例。模式是相对稳定的,而实例是
相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实
例反映的是数据库某一时刻的状态。1.2.2
三级模式结构美国国家标准协会(Arnerican National Standard Institute. ANSI)的数据库管理系统研究
小组于1978 年提出了标准化的建议,将数据库结构分为3 级: 面向用户或应用程序员的用户
级、面向建立和维护数据库人员的概念级、面向系统程序员的物理级。
其中, 用户级对应外模式, 概念级对应概念模式, 物理级对应内模式,不同级别的用户对
数据库形成不同的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数
据库在用户眼中的反映。很显然,不同层次(级别〉的用户所看到的数据库是不同的。数据库
系统结构层次如图1.1所示。1. 分类
(1)外模式
外模式又称子模式或用户模式, 对应用户级。它是某个或某几个用户所看到的数据库的数
据视图, 是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中
允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应用户的数据
记录(外模式) .也可以利用数据操纵语言( Data Manipulation Language. D~在L) 对这些数据
记录进行操作。总的来说,外模式反映了数据库的用户观。(2) 概念模式
模式又称概念模式或逻辑模式,对应概念级。它是由数据库设计者综合所有用户的数据,
按照统一的观点构造的全局逻辑结构, 是对数据库中全部数据的逻辑结构和特征的总体描述,
是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言
(Data Description Language. DDL) 来描述、定义的,体现、反映了数据库系统的整体现。(3)内模式
内模式又称存储模式, 对应物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存
储在外存储介质上的数据库。
在一个数据库系统中只有唯一的数据库,因而作为定义、描述数据库存储结构的内模式和
定义、描述数据库逻辑结构的模式也是唯一的, 但建立在数据库系统之上的应用则是非常广泛、
多样的, 所以对应的外模式不是唯一的,也不可能是唯一的。2. 工作原理
数据库的三级模式是数据库在3 个级别(层次)上的抽象,使用户能够逻辑地、抽象地处
理数据而不必关心数据在计算机中的物理表示和存储。实际上,对于一个数据库系统而言,物
理级数据库是客观存在的,是进行数据库操作的基础;概念级数据库不过是物理数据库的一种
逻辑、抽象的描述(模式) ;用户级数据库则是用户与数据库的接口,是概念级数据库的一个
子集(外模式〉。
用户应用程序根据外模式进行数据操作,通过外模式一模式映射定义和建立某个外模式与
模式间的对应关系,将外模式与模式联系起来,当模式发生改变时, 只要改变其映射,就可以
使外模式保持不变,对应的应用程序也保持不变;另一方面,通过模式一内模式映射定义建立
数据的逻辑结构(模式〉与存储结构(内模式)间的对应关系,当数据的存储结构发生变化时,
只需改变模式一内模式映射,就能保持模式不变,因此应用程序也可以保持不变。
1.3 数据模型
数据模型( Data Model ) 是数据特征的抽象,是数据库管理的教学形式框架,也是数据库
系统中用以提供信息表示和操作手段的形式架构。数据模型包括数据库数据的结构部分、数据
库数据的操作部分和数据库数据的约束条件。数据模型描述了在数据库中结构化和操纵数据的
方法,模型的结构部分规定了数据如何被描述。1.3.1
数据模型的分类1. 组成部分
数据模型所描述的内容包括3 部分:数据结构、数据操作和数据约束。
(1)数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的
联系等。数据结构是数据模型的基础,数据操作和约束都基本建立在数据结构上。
不同的数据结构具有不同的操作和约束。
(2) 数据操作:数据模型中的数据操作主要描述在相应数据结构上的操作类型和操作方式。
(3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、
它们之间的制约和依存关系以及数据动态变化的规则,以保证数据的正确、有效和相容。2. 分类
数据模型的研究包括以下3 方面:
(1)概念数据模型
这是面向数据库用户的现实世界的数据模型,主要用来描述世界的概念化结构,可以便数
据库的设计人员在设计的初始阶段摆脱计算机系统及数据库管理系统的具体技术问题, 集中精
力分析数据以及数据之间的联系等。概念数据模型与具体的数据库管理系统无关。需要注意的
是,概念数据模型必须换成逻辑数据模型才能在数据库管理系统中实现。(2) 逻辑数据模型
这是用户在数据库中看到的数据模型,是具体的数据库管理系统所支持的数据模型,主要
有网状数据模型、层次数据模型和关系数据模型3 种类型。此模型既要面向用户,又要面向系
统,主要用于数据库管理系统的实现。(3)物理数据模型
这是描述数据在存储介质上的组织结构的数据模型,不仅与具体的数据库管理系统有关,
还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有与其相对应的物理数据模型。数
据库管理系统为了保证其独立性与可移植性, 将大部分物理数据模型的实现工作交由系统自动
完成,而设计者只设计索引、聚集等特殊结构。
数据库的类型是根据数据模型来划分的, 而任何一个DBMS 也是根据数据模型有针对性
地设计出来的,这就意味着必须把数据库组织成符合DBMS 规定的数据模型。目前成熟地应
用在数据库系统中的数据模型有层次模型、网状模型和关系模型。它们之间的根本区别在于数
据之间联系的表示方式不同(记录型之间的联系方式不同)。层次模型以"树结构"表示数据
之间的联系。网状模型以"图结构"来表示数据之间的联系。关系模型是用"二维表" (或称
为关系)来表示数据之间的联系的。1.3.2 E—R模型
E-R 方法是"实体.联系方法" (Entity-Relationship Approach) 的简称,是描述现实世界
概念结构模型的有效方法。巴R 方法是表示概念模型的一种方式,用矩形表示实体型,在矩形
框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形
表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同
时在无向边旁标上联系的类型(1 :1 、l:n 或m:n) 。用巳R 方法描述的数据模型即为E-R 模型,
也称为E-R 图。图1.2 所示为一个简单学生管理系统的数据库E-R 模型图。1. E-R 圄成分
在E-R 图中,有如下4 个成分。
• 矩形框:表示实体,在框中记入实体名.
• 菱形框:表示联系,在框中记入联系名。
• 椭圆形框:表示实体或联系的属性,将属性名记入框中.对于主属性名,则在其名称
下加一下划线.
• 连线:实体与属性之间、实体与联系之间、联系与属性之间用直线相连,并在直线上
标注联系的类型。2. 相图要素
构成E-R 图的基本要素是实体型、属性和联系,其表示方法如下。
(1)实体型( Entity) : 有相同属性的实体具有相同的特征和性质,用实体名及其属性名
集合来抽象和刻画同类实体,在E-R 图中用矩形表示, 在矩形框内写明实体名。例如,学生
张三丰、学生李寻欢都是实体。
(2) 属性(Attribute) : 实体所具有的某一特性,一个实体可由若干个属性来刻画。属
性在E-R 图中用椭圆形表示, 并用无向边将其与相应的实体连接起来。例如, 学生的姓名、
学号、性别都是属性。
如果是多值属性,就在椭圆形外面再套实线椭圆。如果是派生属性,就用虚线椭圆表示。
(3)联系( Relationship) : 也称关系,用于在信息世界中反映实体内部或实体之间的联
系。联系包括实体内的联系和实体间的联系两种, 实体内部的联系通常是指组成实体的各属性
之间的联系, 实体之间的联系通常是指不同实体集之间的联系。联系在E-R 图中用菱形表示,
在菱形框内写明联系名, 并用无向边分别与有关实体连接起来, 同时在无向边旁标上联系的类型
(1 : 1 、1: n 或m :n) 。例如, 老师给学生授课存在授课关系, 学生选课存在选课关系。需要注意的是,联系也可能有属性。例如,学生" 学"某门课程所取得的成绩,既不是学
生的属性也不是课程的属性。由于"成绩"既依赖于某名特定的学生又依赖于某门特定的课程,
因此它是学生与课程之间的联系"学"的属性。一般来说,联系可分为以下3 种类型:(1)一对一联系(1 : 1)
例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对
一的。(2) 一对多联系(1 : n)
例如,某校教师与课程之间存在一对多的联系"教",即每个教师可以教多门课程,但是
每门课程只能由一个教师来教。(3)多对多联系(m: n)
例如,图1.2 表示学生与课程间的联系( "学" )是多对多的,即一个学生可以学多门课
程,每门课程也可以有多个学生来学。3. 设计步骤
一般来说,用户在设计数据库之前需要先设计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 图中的冗余,也可以用规范化
理论来消除冗余。1.3.3
层次模型当前数据库领域常用的数据模型主要有3 种:层次模型、网状模型和关系模型。其中,层
次模型和网状模型统称非关系模型,如图1.3 所示。1. 层次模型定义
现实世界中许多实体之间的联系本来就呈现出一种很自然的层次关系,如家族关系、军队
编制、行政机构等,这就需要用层次结构来描述。层次模型是按照层次结构的形式组织数据库
数据的数据模型,用树形结构来表示各类实体以及实体间的联系。层次模型是在数据结构中满
足下面两个条件的基本层次联系的集合:
• 有且饥有一个节点且没有双亲节点,这个节点称为根节点.
• 除根节点之外的其他节点有且只有一个双亲节点。
在层次模型中,使用节点表示记录。记录之间的联系用节点之间的连线表示,这种联系是
父子之间的一对多的实体联系。层次模型中的同一双亲的子女节点称为兄弟节点,没有子女节
点的节点称为叶节点。层次模型示例如图1.4 所示。层次模型像一棵倒立的树,只有一个根节点,有若干个叶节点,节点的双亲是唯一的。图
1.5 是一个教学院系的数据结构, 图1.6 是教学院系数据库的一个实例,该层次数据结构中有4
个记录。2. 层次模型的数据操作与完挡坦9束
层次模型的数据操作主要有查询、插入、删除和更新。需要注意的是,进行插入、删
除、更新操作时要满足层次模型的完整性约束条件。层次模型必须满足的完整性约束条件
如下:
(1)在进行插入记录值操作时,如果没有指明相应的双亲记录值,就不能插入子女记
录值。
(2) 进行删除记录操作时,如果删除双亲记录值,相应的子女节点值也同时被删除。
(3)进行修改记录操作时,应修改所有相应记录,以保证数据的一致性。3. 层次模型的优缺点
层次模型能够描述自然界的一些基本关系,是其他数据模型所不能代替的,其主要优
点如下:
• 层次模型的数据结构比较简单。
• 对于实体间联系是固定的且预先定义好的应用系统,采用层次模型实现,其性能伏,于
关系模型,不低于网状模型。
• 层次数据模型提供了良好的完整性支持。需要注意的是,层次模型中的任何一个给定的记录值只有按其路径查看时才能显示它的全
部意义,没有一个子记录值能够脱离其双亲记录值而独立存在。因此,层次模型对具有一对多
的层次关系的描述非常直观、自然、容易理解。
同样地,由于层次模型是较为单一的模型,因此能描述的基本关系较少。该模型存在的主
要缺点如下:
(1)现实世界中很多联系是非层次性的,如多对多联系、一个节点具有多个双亲等。
(2) 对插入和删除操作的限制比较多。
(3)查询子节点必须通过双亲节点。
( 4 ) 由于结构严密, 层次命令趋于程序化。
层次模型表示这类联系的方法很不灵活,只能通过引入冗余数据(易产生不一致性)或创
建非自然的数据组织来解决。1.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 ) 复杂,用户不容易使用。
此外,网状模型中由于记录之间的联系是通过存取路径实现的,因此应用程序在访问数据时
必须选择适当的存取路径。因此,用户必须了解系统结构的细节,加重了编写应用程序的负担。1.3.5
关系模型关系模型是当前最重要的、应用最广泛的一种数据模型。目前,主流的数据库系统大部分
都是基于关系模型的关系数据库系统( Relational DataBase System, RDBS ) 的。1 970 年, 美
国IBM 公司SanJose 研究室的研究员E.F.Codd 首次提出数据库系统的关系模型, 开创了数据
库关系方法和关系数据理论的研究, 为数据库技术的发展奠定了理论基础。20 世纪80 年代以
来,计算机厂商新推出的DBMS 儿乎都支持关系模型, 非关系模型的产品也大都添加了关系
接口,数据库领域当前的研究工作也都是以关系方法为基础的。
1. 关系模型的数据结构
关系数据模型是建立在严格的数学概念基础上的。在关系模型中,数据的逻辑结构是一张
二维表, 由行和列组成。关系模型中的主要术语如下。
(1)关系:一个关系对应通常所说的一张二维表。
(2) 元组: 表中的一行称为一个元组,许多系统中把元组称为记录。
(3 )属性: 表中的一列称为一个属性。一个表中往往会有多个属性,为了区分属性,要
给每一列起一个属性名。同一个表中的属性应具有不同的属性名。
( 4 ) 码: 表中的某个属性或属性组的值可以唯一地确定一个元组,且属性组中不含多余
的属性,这样的属性或属性组称为关系的码。
( 5 ) 域: 属性的取值范围。例如, 大学生年龄属性的域是( 1 8~30 ) ,性别的域是(男,女)。
(6) 分量: 无组中的属性值。
( 7 ) 关系模式:关系的型称为关系模式, 是对关系的描述。关系模式的一般表示如下:在关系模型中,实体集以及实体间的联系都是用关系来表示的。关系模型要求关系必须是
规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是:关系的
每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。关系模型示例如图
l. 8 所示。2. 关系模型的数据操作与完翻业包柬
关系数据模型的操作主要包括查询、插入、删除和修改数据,这些操作必须满足关系的完
整性约束条件。关系模型中数据操作的特点是集合操作方式, 即操作对象和操作结果都是集合,
这种操作方式也称为一次一集合的方式。相应地,非关系数据模型的操作方式是一次一记录的
方式。
关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。实体
完整性定义数据库中每一个基本关系的主码应满足的条件,能够保证元组的唯一性。参照完整
性定义表之间的引用关系,即参照与被参照关系。用户定义完整性是用户针对具体的应用环境
制定的数据规则,反映某一具体应用所涉及的数据必须满足的语义要求。3. 关系模型的优缺点
关系模型是当前使用最为广泛的一类模型,目前的主流数据库系统如Oracle、SQLSe凹町
等都采用关系模型。关系数据模型的优点主要体现在以下几点:
• 关系模型与非关系模型不同,它是建立在严格的数学理论基础上的.
• 关系模型的概念羊一,实体与实体间的联系都用关系表示,对数据的检索结果也是关
系(即表) ,所以其数据结构简单、清晰,用户易懂易用。
• 关系模型的物理存储和存取路径对用户透明,从而具有更高的数据独立性、更好的安
会保密性,简化了程序员的数据库开发工作。
需要注意的是,虽然关系模型是现在的主流, 但该模型也存在一定的缺陷, 主要表现在如下两方面:
• 由于存取路径对用户透明,查询效率往往不如非关系数据模型高,因此为了提高性能,
必须对用户的查询请求进行优化,这就增加了开发数据库管理系统的难度和负担.
• 关系数据模型不能以自然的方式表示实体集间的联系,存在语义信息不足、数据类型
过少等弱点。
1.4 常见数据库
目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的
数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。目前主流关系
型数据库管理系统有Oracle、Access 和SQL Se凹町等。本节根据选择数据库管理系统的依据
比较分析这儿种主流数据库管理系统的优势和不足。1.4.1 Access
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 数据库安全性比不上其他类型的数据库。1.4.2 SQL Server
SQL Se凹er 也是Microsoft 公司推出的关系型数据库管理系统, 具有使用方便、可伸缩性
好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 饨的PC 到运行Microsoft
Windows 2012 的服务器等多种平台使用。图1.10 所示为Microsoft SQL Se凹er 数据库的
Management Studio 主界面。Microso负SQL Server 是一个全面的数据库平台,使用集成的商业智能( BI) 工具提供了
企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安
全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL
Se凹町的主要特点如下:
(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 虚拟机上。1.4.3
OracleOracle 数据库系统是美国甲骨文( Oracle) 公司提供的以分布式数据库为核心的一组软件
产品,是目前流行的客户/服务器(CLIENT/SERVER) 或B/S 体系结构的数据库之一。图1.1 1
所示为Or部le 10g 数据库的Developer 主界面。Oracle 数据库是目前世界上使用最为广泛的数据库管理系统, 作为一个通用的数据库系
统,它具有完整的数据管理功能:作为一个关系数据库,它是一个完备关系的产品;作为分布
式数据库, 它实现了分布式处理功能。只要在一种机型上学习了。racle 知识, 便能在各种类
型的机器上使用。
编写本书时, Oracle 数据库的最新版本为Oracle Database 12c 0 Oracle 12c 引入了一个新
的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地
提高资源使用率和灵活性, 如Oracle Multitenant 可快速整合多个数据库,而Automatic Data
Optimization 和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 等, 有兴趣的读者可
自行了解,此处不再赘述。
1.5 小结
1.6
经典习题与面试题
第2章 走进SQL Server 2016
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 帮助功能
2.1
SQL Server 2016简介
SQL Server 是Mi crosoft 公司推出的关系型数据库管理系统, 是一个全面的数据平台,为
企业提供可革的数据支持。2016 年7 月1 日,微软发布了SQL Server 数据库软件家族中最重
要的一代产品,命名为SQL Server 2016 。从最早的OS/2 版本到如今的SQL Server 2016, SQL
Se凹er 的每一代产品都会在完善基本功能的前提下增加新的功能,微软SQL Server 2016 正式
版有着涉及数据库引擎、分析服务等多个方面的功能性增强和改进,同时也增加了很多全新的
功能, 如数据全程加密、支持R 语言、延伸数据库、实时业务分析与内存OLTP、原生JSON
支持、行级安全等。
用户可以根据应用程序的需要安装不同版本的SQL Se凹er 2016 组件,不同版本的SQL
Server 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凹er
2016 也同样提供免费版本,其中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 免费版就能满足各功能的学习要求。
2.2 SQL Server 2016的特点
SQL Se凹er 作为目前程序开发中使用广泛的数据库软件之一, 每一次版本的更新都会带来
许多不同的变化。最新版本的SQL Se凹er 2016 数据库引擎引入了一些新功能和增强功能,这
些功能可以提高设计、开发和维护数据存储系统的架构师、开发人员和管理员的能力和工作效
率。本节将对SQLSe凹er 2016 中的版本特点进行讲述。2.2.1 SQL Server 2016中新的组件功能
相对于旧版本, SQL Server 2016 中新的组件增加了许多新的功能。
在性能上, SQL Se凹er 2016 利用实时内存业务分析计算技术C Real-Time Operational
Anal严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 混合备份功能。2.2.2
SQL Server 2016混合云技术考虑到企业级的应用程序将面临复杂的硬件配置、大量峰值需求等一系列的重要挑战,
Microsoft 提出了混合云策略, 为传统的私有云、公共云和混合云环境提供支持, 从而克服这
些重要挑战。
SQL Se凹er 2016 直接支持将数据文件和日志部署到Microsoft Azure 公有云存储,从而可
以无缝打通公有云和私有云的边界, 其架构如图2. 1 所示。将数据库部署在Azure Blob 中存储的优点在于可提高数据库性能、便于数据的迁移、提
高数据库安全性、将数据虚拟化。此外, SQL Se凹er 2016 的存储引擎中增加了对于Azure Blob
的数据访问机制, 如图2 .2 所示。SQL Server 2016 与Azure 有了更深程度的集成,用户可以通过将数据库文件分配在Azure
上进行存储,为数据库带来性能、可维护、安全上的多重保障。
2.3 安装SQL Server
2016
在对SQL Server 2016 有了初步的了解后,本节将学习如何将SQLSe凹er 安装在计算机上。
SQL Server 20 1 6 的安装程序采用了简单直观的图形化界面,用户在安装过程中只需要根据系
统提示选择或输入相关的配置信息即可。2.3.1 SQL Server 2016安装必备
在安装SQL Server 2016 之前,首先需要对计算机的硬件和软件环境进行简单的评估。SQL
Se凹er 2016 是一款系统资源消耗相对较大的软件,如果硬件没有达到要求,就无法安装,系
统要求最低硬件配置如表2 .1所示。
表2.1 安装SQL Server 2016 硬件要求安装SQL Se凹er 2016 除了要符合表2.1中的硬件要求外,在软件环境方面,首先建议在
NTFS 文件格式下运行SQL Se凹er 2016 ,因为FAT32 格式没有文件安全系统;其次, NET
Framework 3.5 SP1 是SQL Se凹er Management Studio 必需的,在安装SQL Server 之前要确保
有.NET Framework 环境。
在安装SQL SelVer 2016 之前要确保计算机操作系统为Windows8 及以上版本,否则会因
为缺少组件而导致无法正常安装,并且仅x64 处理器支持SQL SelVer 2016 的安装, x86
处理器不再支持此安装。2.3.2
SQL Server 2016的安装2.3.3 SQL Server
2016的卸载
2.4 使用SQL Server 2016帮助
2.5 小结
2.6
经典习题与面试题
第3章 创建数据库
在安装好SQL Server 2016 后, 用户首先需要做的工作就是创建一个数据库。SQL Server
2016 的数据库是指以一定方式存储在一起、能为多个用户共亭、具有尽可能小的冗余度、与
应用程序,彼此独立的数据集合。在SQL Se凹er 2016 中创建数据库是每一个软件开发人员和数
据库管理员的必备技能。
本章重点内容:
• 了解数据库的基本概念
• 掌握数据库常用对象和数据库的组成
• 掌握数据库的命名规则
• 会使用管理器创建和修改数据库
3.1
数据库简介
在具体介绍SQL Server 2016 中如何创建数据库之前,读者需要对数据库的基本概念有初
步了解。本节将为读者介绍一些数据库的专用术语,如数据库对象、系统数据库、表、记录、
索引等。3.1.1 数据库基本概念
简单地说, 数据库是一个单位或一个应用领域的通用数据处理系统, 存储的是属于企业和
事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的, 按一定
的数据模型进行组织、描述和存储。数据库的结构基于数据间的自然联系,可提供一切必要的
存取路径,且数据不针对某一应用, 而是面向全组织的,具有整体的结构化特征。
数据库中的数据是为众多用户共享信息而建立的,已经摆脱了具体程序的限制和制约。不
同的用户可以按各自的用法使用数据库中的数据,多个用户可以同时共享数据库中的数据资
源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息
内容的要求,同时也满足了各用户之间信息通信的要求。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 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型
数据库运用,这一概念是一种全新的思维的注入。3.1.2
数据库常用对象数据库对象是数据库的组成部分,常见的对象有表、索引、视图、图表、默认值、规则、
触发器、存储过程、用户、序列等,本小节将简要介绍这些对象的概念,为后续学习打下基础。(1)表( Table)
数据库中的表与日常生活中使用的表格类似,由行( Row ) 和列(Column) 组成。其中,
列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括若干列的信息项。
一行数据称为一个或一条记录,是有一定意义的信息组合。一个数据库表由一条或多条记录组
成,没有记录的表称为空表。
每个表中通常都有一个主关键字,用于唯一地确定一条记录。(2) 索引CIndex)
索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径, 并且可监
督表的数据,使其索引所指向的列中的数据不重复。(3)视图(View)
视图看上去似乎与表一模一样,具有一组命名的字段和数据项, 但它其实是一个虚拟的表,
在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。
由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那
些需要的数据信息。(4) 图表( Diagram)
图表其实就是数据库表之间的关系示意图, 利用图表可以编辑表与表之间的关系。
(5) 默认值(Default)
默认值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设
定好的值。(6) 规则( Rule)
规则是对数据库表中数据信息的限制,其限定的是表的列。
( 7) 触发器(Trigger)
触发器是一个用户定义的SQL 事务命令的集合。当对一个表进行插入、更改、删除时,
这组命令就会自动执行。(8) 存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语旬,经编译后存储在数据
库中的SQL 程序。(9) 用户(User)
所谓用户,就是有权限访问数据库的人,同时需要自己登录账号和密码。一般来说,数据库用
户分为管理员用户和普通用户,前者可对数据库进行修改删除,后者只能进行阅读、查看等操作。
除了如上列出的数据库对象之外,不同的数据库管理系统也有部分自定义的对象,将在具
体学习中分别介绍,此处不再赘述。3.1.3 数据库的组成
前面章节提到,数据库是相关数据的集合。一个数据库含有各种成分,包括数据表、记录、
字段、索引等。从使用者的观点看,数据库主要由文档( 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.1.4
系统数据库在SQLSe凹er 20 1 6 系统运行时会用到的相关信息(如系统对象和组态设置等〉都是以数
据库的形式存在的, 而存放这些系统信息的数据库称为系统数据库。
1 . 系统数据库
当用户成功安装SQL Se凹er 20 1 6 后, 打开该数据库时会发现系统会自动建立master 、
model 、msdb、resource 和tempdb 五个系统数据库。这些系统数据库有着各自不同的功能,
具体如下:
(1) master
master 数据库是SQL Server 20 1 6 中最重要的数据库, 记录了SQL Server 20 1 6 系统中所有
的系统信息, 包括登入账户、系统配置和设置、服务器中数据库的名称、相关信息和这些数据
库文件的位置以及SQLSe凹er 2016 初始化信息等。由于master 数据库记录了如此多且重要的
信息, 一旦数据库文件损失或损毁,将对整个SQL Server 系统的运行造成重大的影响, 甚至
使得整个系统瘫痪, 因此要经常对mas阳数据库进行备份, 以便在发生问题时对数据库进行
恢复。
(2) tempdb
tempdb 数据库是存在于SQL Server 2016 会话期间的一个临时性的数据库。一旦关闭SQL
Server 2016, tempdb 数据库保存的内容将自动消失。重新启动SQLSe凹er 201 6 时,系统将重
新创建新的且内容为空的tempdb 数据库。
tempdb 保存的内容主要包括显示创建临时对象, 例如表、存储过程、表变革或游标;
所有版本的更新记录; SQL Server 创建的内部工作表:创建或重新生成索引时, 临时排序
的结果。
(3) model
model 系统数据库是一个模板数据库, 可以用作建立数据库的模板。它包含建立新数据库
时所需的基本对象, 如系统表、查看表、登录信息等。在系统执行建立新数据库操作时, 它会
复制这个模板数据库的内容到新的数据库上。由于所有新建立的数据库都是继承这个model
数据库而来的, 因此, 若更改model 数据库中的内容,则稍后建立的数据库也都会包含该变动。
model 系统数据库是tempdb 数据库的基础, 由于每次启动SQL Se凹er 2016 时, 系统都会创建tempdb 数据库,因此model 数据库必须始终存在于SQL Server 系统中,用户不能删除该
系统数据库。
(4) msdb
msdb 数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储
空间。
SQLSe凹er 代理服务是SQL Server 2016 中的一个Windows 服务,用于运行任何己创建的
计划作业。作业是指SQL Server 中定义的能自动运行的一系列操作。例如,如果希望在每个
工作日下班后备份公司所有服务器,就可以通过配置SQL Server 代理服务使数据库备份任务
在周一到周五的22: 00 之后自动运行。
( 5) resource
resource 数据库是只读数据库,包含SQL Se凹er 中所有系统对象,如sys.object 对象。SQL
Server 系统对象在物理上持续存在于resource 数据库中。
2. 修改系统数据
SQL Server 2016 不支持用户直接更新系统对象(如系统数据库、系统存储过程和目录视
图) 中的信息。但SQL Server 2016 提供了一整套管理工具,用户可以使用这些工具充分管理
他们的系统以及数据库中的所有用户和对象。其中包括:
(1)管理实用工具,如SQLSe凹er Management Sωdio ,帮助用户管理所有SQL Server 2016
的数据对象。
(2) SQL-SMO API,使程序员获得在其应用程序中管理SQLServer 的全部功能。
(3)下SQL 脚本和存储过程,这组工具允许用户使用系统存储过程和T-SQL DDL 数据
定义语句。3. 查看系统数据库数据
同样, SQL Server 2016 允许用户通过使用以下方法获得系统数据库的目录和相关系
统信息:
(1)系统目录视图。
(2) SQL-SMO 。
(3) Windows Management Instrumentation (WMI)接口。
( 4) 应用程序中使用的数据API (如ADO、OLEDB 或ODBC ) 的目录函数、方法、特
性或属性。
( 5) T-SQL 系统存储过程和内置函数。
3.2 SQL Server的命名规则
为了提供完善的数据库管理机制, SQL Se凹er 20 1 6 设计了严格的命名规则。用户在创建
或引用数据库实体(如表、索引、约束等〉时, 必须遵守SQL Server 20 16 的命名规则, 否则
有可能发生一些难以预料和检查的错误。本节将具体讲解标识符的分类和格式、数据库对象的
命名规则与实例命名规则。3.2.1
标识符SQL Server 20 1 6 的所有对象, 包括服务器、数据库以及数据库对象,如表、视图、列、
索引、触发器、存储过程、规则、默认值和约束等都可以有一个标识符。对绝大多数对象来说,
标识符是必不可少的, 但对某些对象(如约束)来说, 是否规定标识符是可选的。对象的标识
符一般在创建对象时定义, 作为引用对象的工具使用。
例如下面的SQL 语句:CREATE TABLE student
i d i nt primary key,
name varchar (20)这个例子创建了一个表格,表格的名字是一个标识符: student。表格中定义了两列, 列的
名字分别是id 和name ,它们都是合法的标识符。此外,上述语句还自动定义了另一个未命名
的主键约束。1. 标识符分类
具体来说, 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 语句中就必须使用分隔符号加以
限定,如:SELECT * FROM [my table] WHERE [order]=lO在这个例子中,必须使用分隔标识符,因为在FROM 子句中的标识符my table 中含有空
格, 而where 子句中的标识符order 是系统保留字。
这两个标识符都不遵守标识符命名规则,必须使用分隔符,否则无法通过代码编译。2. 标识符格式
与程序设计语言类似, SQL Se凹er 2016 中的标识符必须符合一定的格式规定,其具体内
容如下:
(1)标识符必须是统一码(Unicode) 2.0 标准中规定的字符,以及其他一些语言字符,
如汉字等。
(2) 标识符后的字符可以是"_" "@" "#" "$"及数字。
(3)标识符不允许是T-SQL 的保留字。
(4) 标识符内不允许有空格和特殊字符。
需要注意的是,标识符最多可以容纳1 28 个字符。此外,某些以特殊符号开头的标识符在
SQLSe凹er 中具有特定的含义。例如,以"@"开头的标识符表示这是一个局部变革或一个函
数的参数,以"#"开头的标识符表示这是一个临时表或一个存储过程,以"棉"开头的标识
符表示这是一个全局的临时数据库对象。在T-SQL 中, 全局变量以" @@"开头。3.2.2 对象命名规则
SQL Server 20 1 6 使用T-SQL 语言,该语言中使用的数据对象包括表、视图、存储过程、
触发器等, 这些对象的标识符也需符合如下命名规则。
(1)第一个字符必须是这些字符之一:字母a-z 和A-Z、来自其他语言的字母字符、下
划线-、@或者数字符号扒
(2) 后续字符可以是所有的字母、十进制数字、@符号、美元符号($)、数字符号或下
划线。
除非另外指定,否则所有对数据库对象名的T-SQL 引用可以是由4 部分组成的名称,格
式如下:[
server_name.[database_name] . [owner_name].
| database_name. [owner_name].
| owner name.
] object_name具体的语法解释如下:
• server_name 指定链接服务器名称或远程服务器名称.
• 当对象驻留在SQL Server 2016 数据库中时, database_name 指定该SQL Server 2016
数据库的名称;当对象在链接服务器中时,则指定OLEDB 目录。
• 如果对象在SQL Server 2016 数据库中, owner name 指定拥有该对象的用户;当对象
在链接服务器中时,则指定OLEDB 架构名称。
• object_name 是引用对象的名称.
引用对象名的格式如表3. 1 所示。当引用某个特定对象时,不必总是为SQL Server 指定标识该对象的服务器、数据库和所
有者。可以省略中间级节点,而使用句点表示这些位置。对象名的有效格式是:server.database.owner.object
server . database .. object
server..owner.object
server . . . obj ect
database.owner.object
database. . object
owner.object
革鑫3.2.3
实例命名规则所谓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 的前提,也有助于用户理解SQL
Server 中的其他内容。
3.3 创建与管理数据库
SQL Se凹er 2016 中有多种创建数据库的方式,用户可根据自身的喜好或不同的应用环境
进行选择。同样地, SQL Server 20 1 6 数据库的管理也有多种实现方式。本节将为读者做具体
介绍。3.3.1
使用管理器创建数据库本小节主要讲解如何使用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 工具。
下面演示使用管理器创建数据库的具体步骤。3.3.2 使用管理器修改数据库
本小节讲解如何使用管理器修改数据库, 包括重命名数据库、更改数据库的选项设置、增
加数据库的大小及显示数据库的数据和日志空间信息的设置。1. 重命名数据库
2. 更改数据库的选项设置
对于已经创建的SQL Server 2016 数据库,用户还可以更改该数据库的属性,可以通过【选
项】窗体来实现,具体步骤如下:3. 增加数据库的大小
当用户在使用SQL Server 2016 数据库的过程中,因数据量的增大而导致数据库无法容纳
时,可以增加数据库的大小,其实现步骤如下:4. 显示数据库的数据和日志空间信息
若要显示SQL Server 2016 数据库的数据和日志空间信息,则可通过如下步骤来实现:3.3.3
使用管理器删除数据库本小节讲解如何使用企业管理器删除数据库,同样也从限制和局限、必备条件、建议及权
限儿方面开展讨论, 并演示删除流程。(1)限制和局限:不能删除系统数据库。
( 2) 必备条件:删除数据库中的所有数据库快照。如果日志传送涉及数据库,就删除日
志传送。如果为事务复制发布了数据库, 或将数据库发布或订阅到合并复制,就从数据库中删
除复制。
(3 )建议:考虑对数据库进行完整备份,只有通过还原备份才能重新创建己删除的数
据库。
( 4 ) 权限:若要执行DROP DATABASE 操作,则用户必须至少对数据库具有CONTROL
权限。
当用户确认要删除SQL Se凹er 2016 中的某个数据库时,可以直接在SQL Server
Management Studio Express 管理器中删除该数据库,具体操作为:在SQLServer 对象资源管理
器中选择目标数据库,如TEST 数据库,然后右击,选择【删除】命令,如图3.9 所示,确认
选择了正确数据库,然后单击【确定】按钮。3.3.4 操作学生数据库
3.4
小结
数据库的创建和使用是用户学习SQL Server 20 1 6 的入门环节。本章阐述数据库的基本概
念,首先介绍了数据库的常用对象、组成及系统数据库;然后简要描述SQL Server 数据库的
命名规则;最后展示使用SQL Server 2016 管理器创建和管理数据库的详细步骤。本章的难点
是需要掌握数据库领域大量的基本概念,虽然有些概念一开始接触会感到比较抽象, 但随着学
习的逐渐推进, 在后续章节中就会逐渐变得清晰、具体起来。
3.5 经典习题与面试题
第4章
数 据 表
本章主要介绍SQL Server 2016 中的数据表对象,并对数据表的基本操作进行详细讲解,
对SQL Server 2016 中的基本数据类型、创建新的数据表、查看数据表结拘、添加数据字段、
修改数据类型、对数据表的约束操作等内容做阐述。通过本章的学习, 用户可以对数据表有基
本的认识和了解, 掌握创建和修改数据表的基本方法, 理解数据约束的作用和意义。
本章重点内容:
• 理解数据表和数据库之间的关系
• 掌握数据表中的基本数据类型
• 掌握使用管理器创建和维护数据表
• 数据的约束操作
4.1 数据表概述
数据表是数据库中最基本的操作对象,通常说的把数据存放在数据库中其实就是存放在数
据库中的一张张数据表中。数据表中的数据按照行和列的规则来进行数据存储, 每一行为一条
数据记录, 一条数据记录是由多个字段的描述信息组成的。每一列称为一个字段,列的标题称
为字段名, 它们都具有相同的描述信息,如数据类型、字段大小等。一系列行和列的合集称为
域。
在具体的学习过程中,读者可以把数据库理解为一个记录本, 数据表就是其中的每一页纸。
一个数据库数据内容的多少其实并不是指这本记录本有多大多厚, 而是指每一页纸张记录的内
容有多少。
数据表的主要作用是存储各类数据信息,由行和列组成。例如,有一张记录了员工信息的
employee 表,每一个字段就是用来描述员工的一个特定类型信息,比如姓名,每一行则包含
用于描述某一员工的所有信息: 工号、姓名、性别、学历,这些信息的集合称为一条记录,如
表4.1 所示。4.1.1
SQL Server 2016基本数据类型数据虽然是用户存储数据的基本依据,用于设置保存数据的基本类型。SQL Server 2016
中支持多种数据类型的设置,包括字符型、数值型、日期型等。数据类型的作用在于规划每个
字段所存储的数据内容类别和数据存储量的大小, 合理地分配数据类型可以达到优化数据表和
节省空间资源的效果。
SQL Server 20 16 数据库管理系统中的数据类型分为两类:一类是系统提供给用户使用的
默认数据类型,称为基本数据类型;另一类是用户自定义的数据类型。下面先介绍基本数据类
型的内容。1. 整数类型
整数类型是SQL Se凹er 20 16 中常用的数据类型之一, 主要用于存储整数值, 如存放" 年
龄" "工龄"等信息,数值型的数据可以直接进行运算处理。具体来说, SQL Server 201 6 的
整数类型包含如下4 种:
( 1 ) int (INTEGER )
INT (或lNTEGER ) 的存储容量为4 个字节,其中一个二进制位表示正负符号, 一个字
节8 位。根据字节大小,用户可以算出它所能存储的数据容量为31 位, 用于存储
内所有的整数。
(2) SMALLlNT
SMALL剧T 的存储量为2 个字节, 其中一个二进制位表示正负符号, 剩余的1 5 位用来存
储数据内容,用于存储 内所有的整数。
(3 ) TINYINT
TINYlNT 只占用一个字节存储空间,用于存储0-255 的所有整数。
(4 ) BIGINT
BIGlNT 是所有整数类型中存储量最大的,存储容量达到8 个字节,用于存储
中所有的整数。2. 浮点数据类型
浮点数据类型用于存储十进制的小数。浮点类型的数值在SQL Server 20 1 6 中使用了上舍入
(或称只入不舍)的方法进行存储,当且仅当要舍入的是一个非零整数时,对其保留数字部分的
最低有效位上的数值加1, 并进行必要的进位。SQL Server 20 1 6 的浮点数据类型包含如下3 种:
( 1) REAL
REAL 类型的存储空间为4 个字节,可精确到第7 位小数,其范围为-3.4E+3 8--3.40E+38 。
(2) FLOAT
FLOAT 数据类型是一种近似数值类型,供浮点数使用。浮点数是近似的,是因为在其范
围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308-1.79E+308 的任意数。
(3) DECIMAL
DECIMAL 数据类型提供浮点数所需要的实际存储空间,能用来存储从 的
固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。范围是小数点左
右所能存储的数字的总位数,精度是小数点右边存储的数字的位数。例如, DECIMAL(13 3)
表示共有13 位,其中整数1 0 位、小数3 位。3. 字符类型
字符类型同样是SQL Server 2016 中常用的数据类型,可用于存储汉字、符号、英文、标点符
号等,数字同样可以作为字符类型来存储。SQL Server 2016 的字符类型包含如下4 种:
(1 ) CHAR
CHAR 数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列此类型的数
据时,用户必须指定列长。当用户知道要存储的数据的长度时,此数据类型就较为适用。例如,
当一个字段要用于存储手机号码时, 需用到11 个字符, CHAR 类型默认为存储一个字符, 最
多可存储8000 个字符。
(2) VARCHAR
VARCHAR 数据类型与CHAR 类型一样,用来存储非统一编码型字符数据。与CHAR 型
不一样的是,此数据类型为变长。当定义一列该数据类型的数据时,用户要指定该列的最大长
度。它与CHAR 数据类型最大的区别是, 存储的长度不是列长, 而是数据的长度。
(3) NCHAR
NCHAR 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个
字符, 而不是用单字节(普通文本中的情况)。它允许大量地扩展字符。此数据类型能存储
4000 种字符,使用的字节空间上增加了一倍。(4) NVARCHAR
NVARCHAR 数据类型是一种变长类型的字符型数据, 具有统一的编码方式。此数据类型
能存储4000 种字符,使用的字节空间增加了一倍。4. 日期和时间类型
(1) DATE
DATE 类型用于存储常用日期,该类型占3 个字节的存储空间,数据的存储格式为
YYYY-MM-DD 。
• YYYY: 表示日期的年份,取值范围为0001 -9999.
• MM: 表示日期中的月份,取值范围为01-12.
• DD: 表示日期中的某一天,取值范围为0 1-3 1 .
(2) TIME
TIME 类型用于存储一天当中的某一个时间,该类型占5 个字节的存储空间,数据的存储
格式为HH :MM:SS[.NNNNNNN]。
• HH: 表示存储时间的小时位,取值范围为0-23.
• MM: 表示存储时间的分钟位,取值范围为仙5 9.
• SS: 表示存储时间的秒位,取值范围为胁5 9.
• N: 表示存储时间秒的小数位,取佳范围为0-9999999.(3) DATETIME
DATETI如E 数据类型用来表示日期和时间。这种数据类型存储从1 753 年1 月1 日到9999
年12 月3 1 日的所有日期和时间数据,精确到三百分之一秒或3.33 毫秒,该类型占用8 个字
节的存储空间。
( 4) DATETIME 2
DATETIME 2 是从SQL Se凹er 2008 版本以后支持的新日期类型,是DATETIME 的扩展。
相比于DATET队伍, DATET趴在E 2 所支持的日期从000 1 年01 月01 日到9999 年12 月3 1 日,
时间精度为100 纳秒, 占用6~8 字节的存储空间。
( 5) SMALLDATET1ME
SMALLDA TETIME 类型与DATET胁伍类型相似, 只是它所支持的日期范围更小,从1900
年1 月1 日到2079 年6 月6 日, 占用4 字节的存储空间。5. 文本和图形数据类型
(1 ) TEXT
TEXT 数据类型用于存储大容量的文本数据, 它的理论容量为 个字
节,在实际使用TEXT 类型时需要注意硬盘容量。
(2) NTEXT
NTEXT 数据类型与TEXT 类型相似, 不同的是NTEXT 类型采用UNICODE 标准字符集
(Character Set) , 因此其理论容量为个字节。(3) IMAGE
IMAGE 数据类型用于存储大量的二进制数据,理论容量为个字节。
其存储数据的模式与TEXT数据类型相同。通常用来存储图形等( OLE Object Linking and
Embedding , 对象连接和嵌入)对象。
在未来的MicrosoftSQL Server 版本中将不再使用TEXT、TEXT 和IMAGE 数据类型,
为了避免在开发过程中出现问题,最好不要使用,可以使用nvarchar(max)、varchar(max)
和varbinary(max)代替。6. 货币数据类型
(1) MONEY
MONEY 数据类型用于存储货币值, 存储范围是,占用8 个字节的存储空间。
(2) SMALLMONEY
SMALLMONEY 与MONEY 数据类型的作用一致,只是取值范围更小,取范围是
-214748.3648 - 214748 .3647 ,占用4 个字节的存储空间。
7. 位数据类型
bit在SQLServer 2016 中称为位数据类型,取值范围是0 或10 bit 类型常用于逻辑判断,
TRUE 为1, FALSE 为0 。
8. 二进制数据类型
(1) BINARY
BINARY(N)是一个固定长度为N 字节的二进制数据类型, 存储范围由N 来决定, N 的取
值范围为1-8000 , 存储空间为N 字节。为了表示二进制数据,在输入时需在数据前面加上OX
作为二进制标识,例如输入OXBB4 代表BB4 。(2) VARBINARY
VARBINARY 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容
大小可变时,应该使用这种数据类型。
9. 其他数据类型
( 1) ROWVERSION
在SQLServer 2016 中,每一次对数据表的更改, SQLSe凹er 都会更新一个内部的序列数,
这个序列数就保存在ROWVERSION 字段中。所有ROWVERSION 列的值在数据表中是唯一
的,并且每张表中只能有一个包含ROWVERSION 字段的列存在。
使用ROWVERSION 作为数据类型的列,其字段本身的内容是无自身含义的,这种列主
要是作为数据是否被修改过、更新是否成功的作用列。(2) TIMESTAMP。
TIMESTAMP 时间戳数据类型和ROWVERSION 有一定的相似性,每次插入或更改包含
TIMESTAMP的记录时, TIMESPAMP的值就会更新,一张表中只能有一个TIMESPAMP列。
在创建表时只需提供数据类型即可,不需要为TIMESTAMP 所在的数据列提供列名:create table testtable (prikey int primary key ,timestamp )使用ROWVERSION 时不具备这种特性,如果要为某一列指定为ROWVERSION 数据类
型, 需声明列名:(3) UNIQUEIDENTIFIER
全局唯一标识符GUID,一般用作主键的数据类型,是由硬件地址、CPU 标识、时钟频率
所组成的随机数据,在理论上每次生成的GUID 都是全球独一无二、不存在重复的。通常在并
发性较强的环境下可以考虑使用。它的优点在于全球唯一性、可对GUID 值随意修改,但是缺
点也很明显,检索速度慢、编码阅读性差。( 4) CURSOR
游标数据类型,该类型的数据用来存放数据库中选中所包含的行和列,只是一个物理地址
的引用,并不包含索引,用于建立数据集。
(5) SQL_ V ARIANT
用于存储SQL Server 2016 支持的各种数据类型(不包括四XT 、NTEXT、IMAGE、
TIMESTAMP 和SQL VARIANT) 的值。4.1.2 用户自定义数据类型
在SQLSe凹er 2016 中,除了系统提供的基本数据类型外,用户还可以根据自己的需求自
定义数据类型。这里要注意的是, 用户自定义数据类型并不是完全按照自己的意愿凭空创造,
而是建立在系统的基础数据类型之上。用户在自定义数据类型的时候需要指定该类型的名称、
所基于的基础数据类型是否可以为空等。在SQLSe凹er 2016 中可以使用两种方法来创建自定
义数据类型,下面分别对这两种方法进行介绍。
1. 使用资源管理器创建
首先连接SQL Server 2016 服务器,创建一个用于测试的数据库test , 配置参数使用系统
默认的即可。创建自定义数据类型的操作步骤如下:2 . 使用T-SQ L 语句创建
在SQL Server 2016 中除了能够使用管理器创建自定义类型之外, 还可以通过存储过程提
供的sp_addtype 语句来创建,语法规则如下:sp_addtype ZipCode,'varchar(64)','not null';用户定义的数据类型基于在Microsoft SQL Se凹er 中提供的数据类型。当儿个表中必须存
储同一种数据类型,并且为保证这些列有相同的数据类型、长度和可控性时,可以使用用户定
义的数据类型。
4.2 使用管理器管理数据表
4.2.1
创建新数据表在SQL Se凹er 20 1 6 中,使用资源管理器的方法来创建数据表是非常简单有效的方法,现
在我们要在xsxk 数据库中创建一张新的数据表dbo.xs , 具体操作步骤如下。4.2.2 添加数据表字段
使用对象资源管理器对己建立好的表添加数据字段的操作非常简单,例如在dbo.xs 表中
增加一个新的字段, 名称为【班级】,数据类型为char(10) ,允许空值。在dbo.xs 表上右击,
在弹出的快捷菜单中选择【设计】命令,如图4.10 所示。
在弹出的表设计窗口中添加新的字段【班级】, 并设置数据类型为char(10) ,允许为空值,
如图4.11 所示。执行上述操作后,【班级】字段添加成功。如果需要继续添加字段,只需在下一行继续输
入字段信息即可。4.2.3
修改字段数据类型使用对象资源管理器可以随时修改己经设定好字段的数据类型。例如,将刚才增加的班级
字段的数据类型更改为nchar(10) ,同样进入数据表的设计视图中,单击数据类型最右边的下
拉箭头, 选择nchar(10)即可,或者直接输入数据类型名也可以达到相同效果, 如图4 .1 2 所示。
在更改字段数据类型的时候必须要考虑到数据内容和数据类型匹配的关系,对于己有数据
的表来说,更改数据类型时是有风险的,如果新的数据类型与己存储的数据内容出现不匹配的
情况,很有可能造成数据丢失,所以在更换数据类型的时候需要先考虑表中的内容,例如将性
别字段的数据类型从ch叫2)更换为int 会出现如图4.13 所示的提示。4.2.4 重命名数据表
数据表建立完成后,可以随时对表的名称进行修改。展开表节点,对需要更改名称的数据
表右击,在弹出的快捷菜单中选择【重命名】命令即可进入编辑状态, 如图4.14 所示。进入
编辑状态后,输入新的名称即可,如图4 .1 5 所示。4.2.5
删除数据表
4.3 操作数据约束
通常在设计一张数据表的时候不仅要对表中所用字段和内容进行考虑,还有一个更加重要
的问题,就是对数据完整性的设计。数据完整性是指数据的精确性和可靠性,防止表中出现不
符合既定设置的数据(非法数据)。这些数据可能是用户没有根据规则输入的数据,也可能是
黑客对于数据库破解所做出的一些特定尝试,确保数据的完整性对于整个数据库系统而言是非
常重要的。
在SQL Server 2016 中,通常会通过约束的形式来对数据表进行完整性的设置,主要的约
束方式分为5 种,分别是:主键约束Cprimary key constraint) 、唯一性约束C unique constraint) 、
检查约束Ccheck constraint) 、默认约束C default constraint) 和外键约束Cforeign key constraint) 。4.3.1
用主键约束防止无效数据主键约束指的是可以在表中定义一个字段作为表的主要关键字,主键是表中记录的唯一性
标识,每个表中只允许一个PRIMARYKEY 约束,并且作为PRIMARY 阻Y 约束的字段不允
许空值。若在一个表中有多个列作为主键约束,则一列中的值可以是重复的,但是被主键约束
列中的组合值一定要是唯一存在的。
在SQL Server 2016 中添加约束的方法主要有两种,一种是通过对象资源管理器来创建,
还有一种则是使用T-SQL 语句来创建。
使用对象资源管理器对学生选课数据库Cxsxk) 中的学生表Cdbo .xs) 中的学号字段进行
PRIMARY 阻Y 的设定,具体操作如下:4.3.2 用性约束防止重复数据
唯一性约束(UNIQUE) 可以确保数据表在主键列中字段的唯一性。保证其中的数值只出
现一次, 而不会出现重复的现象。例如,在员工信息表中需要录入所有员工的手机号码,然而
并不可能有两位员工的手机号码是相同的,此时我们可以对手机号码字段进行唯一性约束的设
置。在SQL Server 20 1 6 中可以对一个表中的多个字段进行UNIQUE 约束,在使用UNIQUE
时需要注意以下儿点要素:
• UNIQUE 约束是允许空值的.
• UNIQUE 约束可以在一个数据表中设立多个。
• 使用了UNIQUE 约束的字段会建立唯一性索引.
• 在默认的情况下, UNIQUE 约束创建的是非聚集索引。
使用对象资源管理器对姓名字段进行UNIQUE 约束操作的步骤如下:4.3.3
检查约束检查约束是对录入到数据表中的数据所设置的检查条件,以限制输入值,用于保证数据库
的完整性。通过逻辑表达式来对字段的值进行输入内容的限定,例如在员工表中定义了一个
age 字段, 我们需要把这个字段所录入的内容限定在一个合理及合法的范围内,比如1 8--70 岁,
可以通过逻辑表达式age>=18 AND age<=70 来进行判断,逻辑表达式会返回TRUE 或FALSE
两个值, 用来表示符合约束条件和不符合约束条件两种情况。通常在使用检查约束时, 需要注
意以下儿点:
• 在对列进行约束限制时,只能与字段有关;在对表进行约束限定时,只能与限制表中的字段有关.
• 在数据表中可以对多个列进行检查约束的设直。
• 在使用CREATETABLE 时,只能对每个字段设置一个检查约束.
• 若在表中对多个字段进行检查约束,则为表级约束.
• 检查约束将在数据表进行时SERT 和UPDA四操作时对数据进行验证.
• 设直检查约束的时候不能包含子查询。
使用对象资源管理器对学生选课数据库(xsxk) 中的学生表(dbo .xs ) 中的性别字段进行
检查约束的设定,要求只能输入"男"或"女",具体操作步骤如下:4.3.4 默认约束
默认约束是指当某一字段没有提供数据内容时,系统自动给该字段赋予一个设定好的值。
当必须向表中加载一行数据但不知道某一字段值的值或该值不存在时,可以使用默认约束。默
认约束可以使用常雀、函数、空值作为默认值。使用默认约束时,需要注意以下儿点:
• 每个字段只能有一个默认约束.
• 若默认约束设直的值大于字段所九许的长度,如l 截取到字段允许长度.
• 不能加入到带有IDENTπY 属性或T胁伍STAMP 的字段上。
• 若字段的数据类型为用户自定义类型,而且已有默认值绑定在此数据类型上,则不允
许再次使用默认值。4.3.5
外键约束外键约束是在两个表中的数据之间建立和加强链接的一列或多列的组合, 可控制在外键表
中存储的数据。在外键引用中,当包含一个表的主键值的一个或多个列被另一个表中的一个或
多个列引用时,就在这两个表之间创建了链接。使用外键约束需要注意以下儿点:
• 外键约束是对字段参照完整性的设直。
• 外键约束不支持自动创建索引,需要手动建立.
• 表中最多可以使用31 个外键约束。
• 临时表中不能建立外键约束.
• 主键和外键的数据类型必须严格匹配。
4.4 小结
4.5
经典习题与面试题
第5章 视 图
除在数据库关系表中定义基本表的结构和编排方式外, SQL 语言还提供了一种数据组织
方法, 可以按其他组织形式对原来表中的数据进行重新组织, 这种方法就是视图。与表一样,
视图包含一系列带有名称的列和行数据。视图在数据库中并不是以数据值存储集形式存在
的, 行和列数据来自于由定义视图的查询所引用的表, 并且在引用视闯时动态生成。
本章重点内容:
• 了解操作视图的基本概念及优缺点
• 掌握使用管理器创建、查看、删除视图
• 会使用视图操作数据
5.1
视图概述
视图是一个虚拟表, 其内容由查询定义。对其中所引用的基础表来说,视图的作用类似于
筛选.定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查
询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储不同地
区的数据, 而我们需要将这些服务器上结构相似的数据组合起来, 这种方式就很有用。
视国的结构和内容是通过SQL 查询获得的,也称之为视图名, 可以永久地保存在数据库
中。用户通过SQL 查询语旬,可以像其他普通关系表一样, 对视闺中的数据进行查询。视图
可以被看成是虚拟表或存储查询, 可通过视图访问的数据不作为独特的对象存储在数据库内。
视图在数据库内存储的是SELECT 语旬,即数据库内并没有存储视图这个表,而存储的
是视图的定义。SELECT 语旬的结果集构成视图所返回的虚拟表。用尸可以用引用表时所使用
的方法在SQL 语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:
(1 )将用户限定在表中的特定行上。例如,只允许雇员看见工作跟踪表内记录其工作的行。
( 2 ) 将用户限定在特定列上。例如,对于那些不负责处理工资单的雇员, 只允许其看见
雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信
息的列。
(3)将多个表中的列连接起来, 使它们看起来像一个表。
( 4 ) 聚合信息而非提供详细信息。例如,显示一个列的和,或列的最大值和最小值。当数据库管理系统DBMS 在SQL 语句中遇到视图引用时,会从数据库中找出所存储的相
应视图的定义,然后把对视图的引用转换成对构成视图源表的等价请求,并且执行这个等价请
求。利用这种方法, DBMS 在保持源表数据完整性的同时也保持了视图的"可见性"。
对于简单视图, DBMS 通过快速查询直接从源表中提取并构造出视图的每一行。而对于
一些比较复杂的视图, DBMS 则要根据该视图定义中的查询语句进行查询操作,并将结果存
储到一个临时表中。然后DBMS 再从这个临时表中提取数据以满足对视图操作的需要, 并在
不需要的时候抛弃所生成的临时表。但不论DBMS 如何操作,对用户来讲,其结果都是相同
的, 即这个视图能够在SQL 语句中引用, 就好像其是一张真正的关系表一样。
通过定义SELECT 语旬以检索将在视图中显示的数据来创建视图。SELECT 语句引用的
数据表称为视图的基表。视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视
图可用作安全机制,方法是允许用户通过视图访问数据, 而不授予用户直接访问视图基础表的
权限。视图可用于提供向后兼容接口来模拟曾经存在但其架构己更改的表。还可以在向SQL
Server 复制数据和从其中复制数据时使用视图,以便提高性能并对数据进行分区。5.1.1 视图的类型
除了基本用户定义视图的标准角色以外, SQL Server 2016 还提供了下列类型的视图,这
些视图在数据库中起着特殊的作用。
(1)索引视图
索引视图是被具体化了的视图。这意味着已经对视图定义进行了计算并且生成的数据像表
一样存储,用户可以为视图创建索引, 即对视图创建一个唯一的聚集索引。索引视图可以显著
提高某些类型查询的性能,尤其适于聚合许多行的查询,但不太适于经常更新的基本数据集。
(2) 分区视图
分区视图在一台或多台服务器间水平连接一组成员表中的分区数据,使数据看上去如同来
自于一个表。需要注意的是, 连接同一个SQL Server 2016 实例中成员表的视图就是一个本地
分区视图。
(3)系统视图
系统视图包含目录元数据,可以使用系统视图返回与SQL 如何er 实例或在该实例中定义
的对象有关的信息。例如,可以查询sys.databases 目录视图以便返回实例中提供的用户定义数
据库有关的信息。5.1.2
视图的优缺点在数据库中使用视图有很多优点, 尤其是在定义用户使用的数据库结构和增强数据库的安
全保密性方面,视图起了准则作用。使用视图的主要优点是:
(1) 安全保密性。通过视图,用户只能查询和修改他们所能见到的数据,数据库中的其
他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的
不同子集上。
(2) 查询简单性。视图能够从儿个不同的关系表中提取数据,并且用一个单表表示出来,
利用视图将多表查询转换成视图的单表查询。
(3)结构简单性。视图能够给用户一个"个人化"的数据库结构外观,用一组用户感兴
趣的可见表来代表这个数据库的内容。
( 4 ) 隔离变化。视图能够代表一个个一致的、非变化的数据。即使是在作为视图基础的
源表被分隔、重新构造或者重新命名的情况下,也是如此。
(5) 数据完整性。如果数据被存取,并通过视图来输入, DBMS 就能够自动地校验这个
数据,以便确保数据满足所规定的完整性约束。
(6) 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视
图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上, 从而使程序与数据
库表被视图分隔开来。
虽然视图存在上述的优点,但是在定义数据库对象时不能不加选择地来定义视图,因为视
图也存在一些缺点,主要如下:虽然视图存在上述的优点,但是在定义数据库对象时不能不加选择地来定义视图,因为视
图也存在一些缺点,主要如下:
(1)性能。数据库管理系统必须把视图的查询转化成对基本表的查询,如果这个视图是
由一个复杂的多表查询所定义的,那么即使是对视图的一个简单查询,数据库管理系统也会将
其变成一个复杂的结合体,需要花费一定的时间。
(2) 修改限制。当用户试图修改视图的某些记录行时,数据库管理系统必须将其转化为
对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是对于比较复杂的视图,可
能是不可修改的。
5.2 使用管理器管理视图
用户可以使用SQL Server Management Studio 或T-SQL 在SQLSe凹er 20 1 6 中创建视图,
将视图用于以下用途:
(1)集中、简化和自定义每个用户对数据库的认识。
(2) 用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问底层基
表的权限。
(3)提供向后兼容接口来模拟架构己更改的表。5.2.1
创建新视图在数据库中创建了一个或者多个表之后, 就可以创建视图了, 可以使用视图这种数据库对
象以指定的方式查询一个或者多个表中的数据。
(1)限制和局限:只能在当前数据库中创建视图,视图最多可以包含1024 列。
(2) 权限:要求在数据库中具有CREATEVIEW 权限,并具有在其中创建视图的架构的
ALTER 权限。
使用查询和视图设计器创建视图的步骤如下:5.2.2 查看视图信息
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 窗格中。同样, 【条
件】窗格也会自动更新以反映在其他窗格中所做的更改。4.SQL 窗格
可以使用SQL 窗格创建自己的SQL 语句,也可以使用【条件】窗格和【关系图】窗格创
建语旬,在后面这种情况下将在SQL 窗格中相应地创建SQL 语句。生成查询时, SQL 窗格将
自动更新并重新设置格式以便于阅读。
若要打开SQL 窗格,可以首先打开查询和视图设计器(在服务器资源管理器中选择相应
的数据库对象后,在【数据库】菜单中单击【新建查询】) ,然后在【查询设计器】菜单中指
向【窗格】,再单击【SQL 】。在SQL 窗格中,可以进行以下操作:
(1)通过输入SQL 语句创建新查询。
(2) 根据在【关系图】窗格和【条件】窗格中进行的设置,对查询和视图设计器创建的
SQL 语句进行修改。
(3)输入语旬以利用所使用数据库的特有功能。5. 【结果】窗格
【结果】窗格显示最近执行的SELECT 查询的结果(其他查询类型的结果在消息框中显
示)。若要打开【结果】窗格,可以打开或创建一个查询或视图,或者返回某个表的数据。如
果默认情况下不显示【结果】窗格,可以在【查询设计器】菜单中指向【窗格) ,再单击【结
果】命令。用户可以在【结果】窗格中执行的操作如下:
(1)在类似于电子表格的网格中查看最近执行的SELECT 查询的结果集。
(2) 对于显示单个表或视图中的数据的查询或视图,可以编辑结果集中各个列的值、添
加新行以及删除现有的行。
6.SQ L 编辑器使用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 所示的【属
性】窗格。【属性】窗格中显示以下属性。
- (名称):当前视图的名称。
- 服务器名称:当前服务器实例的名称.
- 架构:显示视,图所属的架构。
- 数据库名称:包含此视图的数据库的名称.
- 说明:对当前视图的简短说明.
- GROUPBY 扩展:指定对于基于聚合查询的视图,附加选项可用.
- SQL 注释:显示SQL 语句的说明. 若要查看或编辑完整的说明,可以单击相应的说明, 再单击属性右侧的省略号( ... ) 。注释可以包含视图使用者和使用时间等信息.
- Top 规范:展开此项可显示Top、"百分比" <<表达式"和"等同值"属性。);
> Top: 指定视,图将包括TOP 于句,该于句只返回结果集中的前n 行或前百分之n行。默认情况下,视图将在结果集中返回前10 行。使用此,项可更改返回的行数或指定不同的百分比.
> 表达式:显示视图将返回的百分比(如果"百分比"设直为"是"果"百分比"设直为"否" ) .
>百分比:指定查询将包含一个TOP 子句,仅返回结果集中前百分之n 行。
>等同值:指定视图将包括WITHTIES 于句。如果视图包含ORDERBY 子句和基于百分比的TOP 于句, WITH TIES 将非常有用. 若设直了该选项,并且百分比截止住直在一组行的中间,且这些行在ORDER BY 子句中具有相同的佳,贝1)视
图将会扩展,以包含所有这样的行。
- 绑定到架构:防止用户以会使视图定义失效的任何方式修改影响此视图的基础对象.
- 非重复值:指定查询将在视图中筛选出重复值.当只使用表中的部分列并且这些列可能包含重复佳时,或者当连接两个或更多表的过程会在结果集中产生重复行时,此选
项非常有用.选择该选项等效于向SQL 窗格内的语句中插入关键字DISTINCT。- 更新规范:展开此项可显示"使用视图规则更新"和"Check 选项"属性。
- 输出所有列:显示所有列是否都由所选视图返回.这是在创建视图时设直的.
5.2.3
创建基于视图的视图5.2.4 删除视图
当一个视图不再需要时,可以将其从数据库中删除, 以回收当前使用的磁盘空间。这样数
据库中的任何对象都可以使用此回收空间。
(1)限制和局限: 删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息。还将删除视图的所有权限。使用DROP TABLE 删除的表上的任何视图都必须使用DROP
VIEW 显式删除。
(2) 权限: 需要有对SCHEMA 的ALTER 权限或对OBJECT 的CONTROL 权限。从数据库中删除视图的步骤如下:
5.3
通过视图操作数据
由于视图是一张虚表, 对视图的更新最终实际上是转换成对视图的基本表的更新, 因此可
以通过更新视图的方式实现对表中数据的更新。视图的更新操作包括插入、修改和删除数据,
可以使用SQL Server Management Studio 或T-SQL 在SQL Server 2016 中修改基础表的数据。5.3.1 在视图中插入数据记录
在通过视图插入数据时,必须保证未显示的列有值,该值可以是默认值或NULL 值。假设在饭blel 上创建了一个视图, tablel 有cl 、c2 和c3 三列,视图创建在cl 和c2 上。那么,
通过视图对table l 插入数据时,必须保证c3 有值(可以是默认值或NULL 值) ,否则不能向
视图中插入行。
具体来说, 在视图中插入数据记录,其实质是向构成视图的基本表中插入数据, 具体操作
步骤如下:5.3.2
在视图中修改数据记录5.3.3 在视图中删除数据记录
本章就视图做了概要介绍,首先简要介绍了其基本概念、类型和优缺点,然后重点讲解了
如何使用管理器管理视图,包括创建新视图、查看视图信息、创建基于视图的视图及删除视图,
最后演示了在视图中插入、修改和删除表数据。学习本章要注意视图的操作与基本表的操作之
间的相似和不同之处。5.4
小结5.5 经典习题与面试题
第6章
SQL Server 2016数据库管理
SQL Server 2016 数据库的管理主要包括脱机与联机数据库、分离和附加数据库、导入导
出数据、备份和恢复数据库、收缩数据库和文件以及生戚与执行SQL 脚本等操作。这些操作
都可以通过SQL Server Managernent Studio 工具来完成。
Managernent Studio 工具有一个图形用户界面,用于创建数据库和数据库中的对象。
Management Stud io 还具有一个查询编辑器,用于通过编写下SQL 语句与数据库进行交互。
Management studio 可以从SQL Server 安装磁盘进行安装,也可以从MSDN 中下载。本章主要
讲解如何使用SQL Server Management Studio 维护管理数据库。
本章重点内容:
• 掌握脱机数据库和联机数据库
• 掌握分离数据库和附加数据库
• 会导入导出数据
• 会备份和恢复数据库
• 掌握收缩数据库和文件
• 掌握生成与执行SQL 脚本
6.1 数据库联机
数据库总是处于一个特定的状态中,这些状态包括ONL1NE、OFFLINE 或SUSPECT 等,
如表6. 1 所示。若要确认数据库的当前状态, 可以选择sys.da tabases 目录视图中的state desc
列或DATABASEPROPERTYEX 函数中的Status 属性。6.1.1 脱机数据库
脱机与联机是针对数据库的当前状态来说的, 当一个数据库处于可操作、可查询的状态时
就是联机状态, 而一个数据库尽管可以看到其名字出现在数据库节点中, 但对其不能执行任何
有效的数据库操作时就是脱机状态。
脱机和联机数据库到底有什么意义呢?在数据库管理及软件开发过程中经常会出现对当
前数据库进行迁移的操作, 而在联机状态下, SQL Se凹erMan艳ement Studio 工具是不允许复
制数据库文件的。例如, 把当前开发版本的数据库同步到产品版本的数据库, 就可以通过这种
操作完成, 而通过可视化命令则是非常便捷的方式之一。
当在数据库复制过程中需要暂停当前的联机数据库时, 就可以通过右击, 选择快捷菜单中
的【任务】| 【脱机】命令来完成, 如图6. 1 所示。6.1.2
联机数据库完成对脱机状态的数据库复制后,要将其恢复为可用状态,可以右击,通过【任务】| 【联
机】命令来完成。图6.2 展示如何使用【联机】命令来实现数据库联机。
6.2 分离和附加数据库
如果要将数据库更改到同一计算机的不同SQL Server 实例或要移动数据库,分离和附加
数据库会很有用。用户可以分离数据库的数据和事务日志文件,然后将它们重新附加到同一或
其他SQLServer 实例。
在64 位和32 位环境中, SQLSe凹er 磁盘存储格式均相同。因此,可以将32 位环境中的
数据库附加到64 位环境中,反之亦然。从运行在某个环境中的服务器实例上分离的数据库可
以附加到运行在另一个环境中的服务器实例。6.2.1
分离数据库分离数据库是指将数据库从SQL Server 实例中删除, 但使数据库在其数据文件和事务日
志文件中保持不变。之后,就可以使用这些文件将数据库附加到任何SQL Server 实例,包括
分离该数据库的服务器。如果存在下列任何情况,就不能分离数据库。
( 1 ) 己复制并发布的数据库。如果进行复制,数据库就必须是未发布的。必须通过运行
sp_replic创iondboption 禁用发布后,才能分离数据库。
(2) 数据库中存在数据库快照。必须首先删除所有数据库快照,然后才能分离数据库。(3)该数据库正在某个数据库镜像会话中进行镜像。除非终止该会话,否则无法分离该
数据库。
(4) 数据库处于可疑状态。
( 5) 该数据库是系统数据库。
确定了能够分离数据库后,用户可以通过SQL Se凹erMan唔ement Studio 进行分离,其具
体操作步骤如下。6.2.2 附加数据库
通过SQL Server Management Studio ,用户同样可以附加复制的或分离的SQLServer 数据
库。例如,当将包含全文目录文件的SQL Server 2005 数据库附加到SQL Server 20 1 6 服务器实
例上时, 系统会将目录文件从其以前的位置与其他数据库文件一起附加,这与在SQL Server
2005 中的情况相同。附加日志文件的要求在某些方面取决于数据库是读写的还是只读的。如果读写数据库具有
单个日志文件,并且没有为该日志文件指定新位置,附加操作将在旧位置中查找该文件。如果
找到了旧日志文件,无论数据库上次是否完全关闭,都将使用该文件。但是,若来找到旧文件
日志,数据库上次是完全关闭且现在没有活动日志链,则附加操作将尝试为数据库创建新的日
志文件。
反之,若附加的主数据文件是只读的,则数据库引擎假定数据库也是只读的。对于只读数
据库,日志文件在数据库主文件中指定的位置上必须可用。因为SQL Server 2016 无法更新主
文件中存储的日志位置,所以无法生成新的日志文件。
从上述内容可以看出, 用户试图附加SQLSe凹er 2016 数据库前,必须具备一定的先决条
件,具体如下:
(1)必须首先分离数据库。任何尝试附加未分离的数据库都将返回错误。( 2 ) 附加数据库时,所有数据文件( MDF 文件和LDF 文件) 都必须可用。若任何数据
文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
(3 )在附加数据库时,如果MDF 和四F 文件位于不同目录并且其中一条路径包含
\\?\GlobalRoot,该操作将失败。
具备了如上先决条件后,用户就可以开始附加数据库到指定目标上了,其具体操作步骤如下:
6.3
导入导出数据
导入导出数据也是数据库操作中使用频繁的功能。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 导入SQL Server数据表
SQL Server 20 1 6 的导入导出服务可以实现不同类型的数据库系统的数据转换。为了让用
户可以更直观地使用导入导出服务, Microsoft 提供了导入导出向导。导入和导出向导提供了
一种从源向目标复制数据的简便方法,可以在多种常用数据格式之间转换数据,还可以创建目
标数据库和插入表。
用户可以向这些源中复制数据或从其中复制数据: SQL Server、文本文件、Access、Excel 、
其他OLEDB 访问接口。这些数据源既可用作源,又可用作目标。还可将ADO.NET 访问接口
用作源。指定源和目标后, 便可选择要导入或导出的数据, 用户可以根据源和目标类型,设置
不同的向导选项。
例如,若在SQL Se凹er 数据库之间复制数据,则指定要从中复制数据的表,或提供用来
选择数据的SQL 语句。具体来说,导入SQL Server 数据表的操作步骤如下:6.3.2
导入其他数据源的数据导入其他数据源的数据与6 .3 .1 节中的过程相似, 在选择数据源的步骤中选择不同的数据
源,比如导入Excel 数据, 就在数据源选项中选择Microsoft Excel,如图6.10 所示。其他数据
源同样在数据源下拉列表中选择。6.3.3 导出SQL Server数据表
SQL Server 20 16 中导出数据功能跟导入数据相似,该功能实现将SQLSe凹er 201 6 中的数据导出为指定格式,其具体操作步骤如下:
6.4 备份和恢复数据库
在一些对数据可靠性要求很高的行业(如银行、证券、电信等) ,如果发生意外停机或数
据丢失, 其损失会十分惨重。为此,数据库管理员应针对具体的业务要求制定详细的数据库备
份与灾难恢复策略, 并通过模拟故障对每种可能的情况进行严格测试,只有这样才能保证数据
的高可用性。数据库的备份是一个长期的过程,而恢复只在发生事故后进行,恢复可以看作是备份的逆过程,恢复程度的好坏很大程度上依赖于备份的情况。此外,数据库管理员在恢复时
采取的步骤正确与否也直接影响最终的恢复结果。6.4.1
备份类型备份数据库是指对数据库或事务日志进行复制,当系统、磁盘或数据库文件损坏时, 可以
使用备份文件进行恢复,防止数据丢失。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)
仅包含数据库中部分文件组的数据(包含主要文件组、每个读/写文件组以及任何可选指
定的只读文件中的数据〉。6.4.2 恢复模式
恢复模式旨在控制事务日志维护, 提供给用户选择。SQL Server 20 1 6 有3 种恢复模式:简单恢复模式、完全恢复模式和大容量日志恢复模式。通常,数据库使用完全恢复模式或简单恢复模式。
(1)简单恢复模式
简单恢复模式可以最大限度地减少事务日志的管理开销,因为它不备份事务日志。若数据
库损坏,则简单恢复模式将面临极大的工作丢失风险。数据只能恢复到己丢失数据的最新备份。此, 在简单恢复模式下, 备份间隔应尽可能短, 以防止大量丢失数据。但是,间隔的长度应该足以避免备份开销影响生产工作。在备份策略中加入差异备份可有助于减少开销。
通常,对于用户数据库,简单恢复模式用于测试和开发数据库,或用于主要包含只读数据
的数据库(如数据仓库)。简单恢复模式并不适合生产系统,因为对生产系统而言,丢失最新
的更改是无法接受的,在这种情况下建议使用完全恢复模式。
(2) 完全恢复模式和大容量日志恢复模式
相对于简单恢复模式而言, 完全恢复模式和大容量日志恢复模式提供了更强的数据保护功
能。这些恢复模式基于备份事务日志来提供完整的可恢复性及在最大范围的故障情形内防止丢
失工作。①完全恢复模式
完全恢复模式需要日志备份。此模式完整记录所有事务, 并将事务日志记录保留到对其备
份完毕为止。如果能够在出现故障后备份日志尾部,就可以使用完全恢复模式将数据库恢复到
故障点。完全恢复模式也支持还原单个数据页。
②大容量日志恢复模式
大容量日志记录大多数大容量;操作, 它只用作完全恢复模式的附加模式。对于某些大规模
大容量操作(如大容量导入或索引创建) , 暂时切换到大容量日志恢复模式可提高性能并减少
日志空间使用量。与完全恢复模式相同,大容量日志恢复模式也将事务日志记录保留到对其备
份完毕为止。6.4.3
备份数据库为方使用户, SQL Server 20 1 6 支持用户在数据库在线并且正在使用时进行备份。但是,
存在下列限制:
(1 )无法备份脱机数据。隐式或显式引用脱机数据的任何备份操作都会失败。通常, 即
使一个或多个数据文件不可用,日志备份也会成功。(2) 备份过程中的并发限制。
数据库仍在使用时, SQL Server 可以使用联机备份过程来
备份数据库。在备份过程中,可以进行多个操作。例如,在执行备份操作期间允许使用剧SERT、
UPDATE 或DELEfE 语句。但是, 若在正在创建或删除数据库文件时尝试启动备份操作,则
备份操作将等待, 直到创建或删除操作完成或者备份超时。
如果备份操作与文件管理操作或收缩操作重叠,就会产生冲突。无论哪个冲突操作首先开
始,第二个操作总会等待第一个操作设置的锁超时(超时期限由会话超时设置控制) 。如果在
超时期限内释放锁,第二个操作将继续执行。若锁超时,则第二个操作失败。
一般来说, 在SQL Server 2016 中可以通过SQL Server Management Studio 工具实现备份,
其主要操作流程如下:6.4.4 恢复数据库
数据库完整还原的目的是还原整个数据库。整个数据库在还原期间处于脱机状态。在数据
库的任何部分变为联机之前, 必须将所有数据恢复到同一点,即数据库的所有部分都处于同一
时间点并且不存在未提交的事务。在简单恢复模式下,数据库不能还原到特定备份中的特定时
间点。
在完整恢复模式下, 还原数据备份之后,必须还原所有后续的事务日志备份,然后恢复数
据库。我们可以将数据库还原到这些日志备份之一的特定恢复点。恢复点可以是特定的日期和
时间、标记的事务或日志序列号。还原数据库时,特别是在完整恢复模式或大容量日志恢复模
式下,应使用一个还原顺序。与备份数据库类似,用户可以通过SQL 如何er Management Studio 工具的对象资源管理器
来实现恢复数据库,其主要操作流程如下:
6.5
收缩数据库和文件
当数据库随着使用时间而越来越大时,可以考虑对数据库进行收缩操作。收缩数据文件通
过将数据页从文件末尾移动到更靠近文件开头的来占用的空间来恢复空间,在文件末尾创建足
够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。6.5.1 自动收缩数据库
SQL Server 20 16 支持系统自动收缩数据库和用户手动收缩数据库这两种方式。为提高数
据库的使用空间, SQL Se凹er 2016 会寻找可用的数据库并找出第一个配置为自动收缩的数据
库,它将检查该数据库,并在需要时收缩该数据库。
待一个数据库收缩完成后,系统会等待几分钟再检查下一个配置为自动收缩的数据库。换
句话说, SQL Server 不会同时检查所有数据库,也不会同时收缩所有数据库。它将以循环方式
处理各个数据库,以便负载在时间上错开。
如果用户需要SQL Server 20 16 系统自动对数据库进行收缩,只需为该数据库设置自动收缩功能即可,其操作方式为:右击选择的数据库,选择【属性】| 【选项】菜单项, 在弹出的
数据库属性界面中设置自动收缩为True,如图6.18 所示。6.5.2
手动收缩数据库除了自动收缩外,用户也可以手动对指定的数据库进行收缩。但手动收缩数据库有一定的
限制和局限,主要表现在如下儿方面:
(1)收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定
的大小,或者上一次使用文件大小更改操作(如DBCC SHR剧KFILE ) 设置的大小。例如,
若数据库最初创建时的大小为10MB ,后来增长到100 MB ,则该数据库最小只能收缩到10MB ,
即使己经删除数据库的所有数据也是如此。
(2) 不能在备份数据库时收缩数据库。反之,也不能在数据库执行收缩操作时备份数据库。
(3)遇到内存优化的列存储索引时, DBCC SHR剧KDATABASE 操作将会失败。遇到
columnstore 索引之前完成的工作将会成功,因此数据库可能会较小。若要完成DBCC
SHR剧KDATABASE,则需要在执行DBCCS~ATABASE 前禁用所有列存储索引,然
后重新生成列存储索引。
手动收缩数据库可以在SQL Server Management Studio 工具的对象资源管理器中完成,其
具体实现步骤如下:在收缩数据库界面展示的是数据库xsxk 的基本信息,如果需要进行收缩操作, 需要
首先选中【在释放未使用的空间前重新组织文件。选中此选项可能会影响性能(R) o 】复
选框, 然后在【收缩后文件中的最大可用空间1 中选择收缩后的空间。然后单击【确定】
按钮即可。
6.6 生成与执行SQL脚本
本节主要讲解将数据库生成SQL 脚本、将数据表生成SQL 脚本及执行SQL 脚本3 方面
的操作过程6.6.1
将数据库生成SQL脚本使用对象资源管理器可以快速创建整个数据库的脚本,也可以使用默认选项创建单个数据
库对象的脚本。用户可以在查询编辑器窗口中对文件或剪贴板创建脚本,脚本以Unicode 格式
创建。用户也可以创建用于创建或删除对象的脚本。有些对象类型具有其他脚本选项, 如
ALTER、SELECT、剧SERT... UPDATE、DELETE 和EXECUTE 操作。
有时可能需要使用具有多个选项的脚本,如删除一个过程然后创建一个过程, 或者创建一
个表然后更改一个表。若要创建组合的脚本,可将第一个脚本保存到查询编辑器窗口中, 并将
第二个脚本保存到剪贴板上, 这样就可以在窗口中将第二个脚本粘贴到第一个脚本之后。为某
个对象编写脚本的步骤如下。6.6.2 将数据表生成SQL脚本
SQLServer 同样也支持将数据表生成SQL 脚本。在数据库中选择数据表并右击,选择【编
写表脚本为】菜单项,有常用的SQL 脚本,包括C阻ATE、DROP 、SELECT、剧SERT、UPDATE
和DELETE , 并且可以将脚本直接生成到查询分析器、文件、剪贴板等,如图6.22 所示。6.6.3 执行SQL脚本
SQL 脚本的执行一般需要在查询分析器中完成。查询分析器是一个图形化的数据库编程
接口,是SQL Server 客户端的重要组成部分。查询分析器以*的文本格式编辑SQL 代码,
对语法中的保留字提供彩色显示,方便开发人员使用。
在SQL Server 2016 中,查询分析器是一个功能非常强大的图形工具, 可以进行以下操作:
(1)创建查询和其他SQL 脚本, 并针对SQLServer 数据库执行它们。
(2) 由预定义脚本快速创建常用数据库对象。
(3)快速复制现有数据库对象。
( 4 ) 在参数未知的情况下执行存储过程。
( 5 ) 调试存储过程。
(6) 调试查询性能问题。
( 7 ) 在数据库内定位对象(对象搜索功能) ,或查看和使用对象。
(8) 快速插入、更新或删除表中的行。
(9) 为常用查询创建键盘快捷方式。
(1 0 ) 向【工具】菜单添加常用命令。以执行SQL 脚本操作为例,使用查询分析器执行SQL 脚本需要通过以下步骤来实现:
6.7
小结
数据库管理是数据库管理员和普通用户操作数据库的入门操作,需要重点掌握。该章主要
介绍SQLSe凹er 2016 数据库的维护管理,包括脱机与联机数据库、分离和附加数据库、导入
导出数据、备份和恢复数据库、收缩数据库和文件以及生戚与执行SQL 脚本。读者要特别注
意这些操作的先决条件和限制。通过本章的学习,要能够对数据库和数据表有一个系统的维护
概念,并能够实施维护策略。6.8 经典习题与面试题
第7章
SQL Server 2016系统维护
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 安全策略
7.1 SQL Server
2016维护须知
数据库的管理和维护主要是指为了使业务系统能够高效稳定地运行,对数据库系统进行可
靠性、安全性、扩张性方面的设置。SQL se凹er 2016 数据库的管理和维护工作是一个复杂的
过程,包含多种数据库的备份与恢复技术、服务器管理技术、高可用性技术等。通过使用规范、
一致的数据库管理运维方案,能给系统带来以下优点:
• 减轻数据库管理人员( DBA) 的工作复杂度,使他们可以很容易地从一个数据库系
统的管理维护转移到新数据库系统的维护.
• 可以大幅加快数据库管理维护相关脚本或者设置的部署时间,尤其在维护庞大的数据
库系统时.
• 可以有效地实现团队协作,在大规A莫的数据库系统环境中通常委有一个DBA 团队进
行数据库系统的管理维护,通过使用统一的标准,可以轻松实现协作工作.
• 可以有效地节省数据库系统剥问苦时间,通过使用统一的数据库监控和恢复标准,可以
迅速定位故障,并为处理错误节约时间,这在24*7 ( 24*7 表示不间断执行的数据库,
即每周工作7 天,每天工作24 小时)的数据库系统中尤其有用.
7.2 启动SQL Server 2016服务
要使用SQL Server 201 6 数据库, 首先要开启服务, 如果服务不开启, 即使安装了数据库
软件也无法使用数据库, 如图7.1 所示。SQL Se凹er 本身就是一个Windows 服务,数据库中
的每一个实例对应的就是一个sqlserver.exe 进程, 当启动的时候就调用这个可执行文件来开启
数据库服务。本节将为读者介绍开启数据库服务的几种方法。7.2.1 后台启动SQL Server 2016
7.2.2
通过配置管理器启动SQL Server 2016
7.3 注册SQL Server
2016
SQL Server 2016 允许用户创建服务器组,将多个服务器放在组中进行统一的配置和管理。
服务器组是一个逻辑上的概念,类似于将QQ 中的好友进行分组。当服务器较多的时候, 可以
使用服务器组来进行组织管理。7.3.1 服务器组的创建与删除
7.3.2
服务器的注册与删除
7.4 SQL Server 2016数据库的安全设置
数据库服务器是所有应用的数据中转站,如果数据库服务器被恶意攻击,很有可能造成数
据地露、数据丢失、数据被恶意篡改等诸多无法挽回的损失。因此,对数据库进行安全性设置
是每一个数据管理人员都应该掌握的知识。本节将从更改用户验证方式、设置权限、管理角色、
密码策略等方面对数据库服务器进行设置。7.4.1 更改登录用户验证方式
SQLServer 2016 登录模式分为"Windows 身份验证模式"和"SQL Server 和Windows 身
份验证模式"两种,若在安装SQL Server 时选择的是"Windows 身份验证模式" ,则sa 登录
账户被禁用;若想开启sa 账户,则可以使用ALTERLOGIN 语句。
sa 账户是SQL Se凹er 中一个广为人知的账户,也是经常被攻击的主要目标。若应用程序
需要使用sa 账户,则应在使用前为sa 更换一个复杂的密码并按时更换密码,否则不推荐启用
该账户。在SQLSe凹er 中更换登录用户验证方式的操作步骤如下:7.4.2
创建与删除登录用户在SQL Server 中可以创建多个登录用户来访问数据库服务器, SQL Server 可以对创建的
登录用户做严格的设置来控制账户的访问权限、密码策略等。下面介绍如何在SQLServer 2016
中创建新的登录用户。7.4.3 创建与删除数据库用户
7.4.4
设置服务器角色权限当儿个用户需要在某个特定的数据库中执行类似的动作时(此处没有相应的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:有两大特点,一是初始状态时没有权限,二是所有的数据库用户都是它的成员。7.4.5 密码策略
7.5
小结7.6 经典习题与面试题
第8章
T—SQL 语言
8.1 T—SQL概述 127
8.1.1
T—SQL语言的组成 128
8.1.2 T—SQL语句结构 128
8.1.3
T—SQL语句 129
8.2 常量 130
8.2.1
数字常量 130
8.2.2 字符串常量 131
8.2.3
日期和时间常量 131
8.2.4 符号常量 132
8.3
变量 132
8.3.1 局部变量 132
8.3.2
全局变量 135
8.3.3 注释符 135
8.3.4
运算符 136
8.3.5 通配符 139
8.4
流程控制 140
8.4.1 BEGIN
8.4.2
IF单分支语句 141
8.4.3 IF
8.4.4
CASE多分支语句 142
8.4.5 WHILE循环语句 143
8.4.6
WHILE
8.4.7 RETURN返回语句 145
8.4.8
GOTO跳转语句 146
8.5 常用命令 147
8.5.1
DECLARE定义命令 147
8.5.2 PRINT输出命令 148
8.5.3
BACKUP备份数据库 149
8.5.4 RESTORE还原数据库 152
8.5.5 SELECT返回数据记录 155
8.5.6
SET设置命令 157
8.5.7 SHUTDOWN关闭数据库 159
8.5.8
USE打开数据库 160
8.6 小结 160
8.7
经典习题与面试题 161
第9章 SQL数据查询
9.1
SELECT语句 162
9.1.1 SELECT语句的基本结构 162
9.1.2 用WITH语句检查一致性 163
9.1.3
用SELECT
9.1.4 用INTO子句将记录写入指定文件 167
9.1.5
用WHERE子句筛选符合条件的记录 168
9.1.6 用GROUP BY子句记录分组
172
9.1.7 用HAVING子句对聚合指定条件 173
9.1.8
用ORDER BY子句排序 175
9.1.9 用Distinct关键字排除重复值
176
9.1.10 用Top关键字返回指定记录 176
9.2
Union合并多个查询结果 177
9.2.1 Union与连接之间的区别 177
9.2.2 使用Union All合并表 177
9.2.3
Union中的ORDER BY子句 178
9.2.4 Union中的自动数据类型转换
179
9.2.5 使用Union合并不同类型的数据 180
9.2.6
使用Union合并有不同列数的两个表 180
9.2.7 使用Union进行多表合并
181
9.3 子查询与嵌套查询 182
9.3.1
什么是子查询 182
9.3.2 什么是嵌套查询 182
9.3.3
简单嵌套查询 183
9.3.4 带IN的嵌套查询 183
9.3.5
带Not IN的嵌套查询 184
9.3.6 带Some的嵌套查询 184
9.3.7 带Any的嵌套查询 185
9.3.8
带All的嵌套查询 185
9.3.9 带Exists的嵌套查询 186
9.4 连接查询 187
9.4.1 内部连接 187
9.4.2
外部连接 187
9.4.3 交叉连接 191
9.4.4
连接多表的方法 191
9.5 使用Case函数进行查询 192
9.6
小结 193
9.7 经典习题与面试题 194
第10章
SQL数据操作
10.1 数据库操作 195
10.1.1
创建数据库 195
10.1.2 修改数据库 196
10.1.3
删除数据库 198
10.2 数据表操作 198
10.2.1
使用CREATE TABLE语句创建表 198
10.2.2 创建、修改和删除约束
200
10.2.3 使用ALTER TABLE语句修改表结构 201
10.2.4
使用DROP TABLE语句删除表 202
10.3 数据操作 202
10.3.1
使用SELECT语句浏览数据 203
10.3.2 使用INSERT 语句添加数据
208
10.3.3 使用UPDATE语句修改指定数据 209
10.3.4
使用DELETE语句删除指定数据 210
10.4 视图操作 212
10.4.1
使用CREATE VIEW语句创建视图 212
10.4.2 使用ALTER
VIEW语句修改视图 214
10.4.3 使用DROP VIEW语句删除视图
215
10.5 视图中的数据操作 215
10.5.1
向视图中添加数据 215
10.5.2 修改视图中的数据 216
10.5.3
删除视图中的数据 216
10.6 小结 217
10.7
经典习题与面试题 217
第11章 存储过程
11.1
存储过程概述 218
11.1.1 什么是存储过程 219
11.1.2
存储过程的优点 219
11.2 创建存储过程 220
11.2.1
使用向导创建存储过程 220
11.2.2 使用CREATE
PROCEDURE语句创建存储过程 221
11.3 管理存储过程 223
11.3.1 执行存储过程 223
11.3.2
查看存储过程 226
11.3.3 修改存储过程 228
11.3.4
重命名存储过程 230
11.3.5 删除存储过程 230
11.4
小结 231
11.5 经典习题与面试题
第12章
触发器
12.1 触发器概述 233
12.1.1
触发器的概念 234
12.1.2 触发器的优点 234
12.1.3
触发器的种类 235
12.2 创建触发器 235
12.2.1
创建DML触发器 236
12.2.2 创建DDL触发器 240
12.2.3
创建登录触发器 242
12.2.4 限制非工作时间操作数据 243
12.2.5
限制对保护数据的操作 243
12.2.6 实现级联操作 244
12.3
管理触发器 245
12.3.1 查看触发器 245
12.3.2
修改触发器 247
12.3.3 重命名触发器 248
12.3.4
禁用和启用触发器 248
12.3.5 删除触发器 250
12.4
小结 251
12.5 经典习题与面试题 251
第13章
索引
13.1 索引的概念 252
13.2
索引的优缺点 252
13.2.1 索引的优点 253
13.2.2
索引的缺点 253
13.3 索引的分类 253
13.3.1
聚集索引 253
13.3.2 非聚集索引 254
13.4
索引的操作 254
13.4.1 索引的创建 254
13.4.2
查看索引信息 259
13.4.3 索引的修改 260
13.4.4
索引的删除 262
13.4.5 设置索引选项 262
13.5
索引的分析与维护 264
13.5.1 索引的分析 264
13.5.2
索引的维护 265
13.6 全文索引 267
13.6.1
使用SSMS创建全文索引 267
13.6.2 使用T—SQL语句创建全文索引
270
13.6.3 使用T—SQL语句删除全文索引 271
13.6.4
全文目录 272
13.6.5 全文目录的维护 274
13.7
小结 275
13.8 经典习题与面试题 275
第14章
游 标
14.1 游标的概述 276
14.1.1
游标的优点 277
14.1.2 游标的类型 277
14.2
游标的基本操作 278
14.2.1 声明游标 279
14.2.2
打开游标 280
14.2.3 读取游标中的数据 280
14.2.4
关闭游标 285
14.2.5 释放游标 286
14.3
使用系统过程查看游标 286
14.3.1
用sp_cursor_list查看当前连接打开的游标特性 286
14.3.2
用sp_describe_cursor查看游标特性 288
14.4 小结 289
14.5 经典习题与面试题 290
第15章
SQL函数
15.1 聚合函数 291
15.1.1
聚合函数概述 291
15.1.2 用Sum函数求和 292
15.1.3
用Avg函数求平均值 292
15.1.4 用Min函数返回小值 293
15.1.5 用Max函数返回大值 294
15.1.6
用Count函数统计表记录数 294
15.1.7 用Distinct函数取不重复记录
295
15.1.8 查询重复记录 296
15.2
数学函数 297
15.2.1 数学函数概述 297
15.2.2
用Abs函数求绝对值 298
15.2.3 用Pi函数求圆周率 298
15.2.4
Power函数 299
15.2.5 Rand函数 299
15.2.6
Round函数 300
15.2.7 Square函数和Sqrt函数 300
15.2.8 三角函数 302
15.3
字符串函数 303
15.3.1 字符串函数概述 303
15.3.2
Ascii函数 303
15.3.3 Charindex函数 304
15.3.4
Left函数 304
15.3.5 Right函数 305
15.3.6
Len函数 306
15.3.7 Replace函数 307
15.3.8
Reverse函数 307
15.3.9 Str函数 308
15.3.10
Substring函数 309
15.4 日期和时间函数 310
15.4.1
日期和时间函数概述 310
15.4.2 Getdate函数 310
15.4.3
Day函数 311
15.4.4 Month函数 311
15.4.5
Year函数 312
15.4.6 Datediff函数 313
15.4.7
Dateadd函数 313
15.5 转换函数 314
15.5.1
转换函数概述 314
15.5.2 Cast函数 314
15.5.3
Convert函数 315
15.6 小结 316
15.7
经典习题与面试题 317
第16章 事 务
16.1
事务的概念 318
16.2 显式事务与隐式事务 319
16.2.1
显式事务 320
16.2.2 隐式事务 322
16.2.3
API中控制隐式事务 322
16.2.4 事务的COMMIT和ROLLBACK
322
16.3 使用事务 323
16.3.1
开始事务 323
16.3.2 结束事务 324
16.3.3
回滚事务 325
16.3.4 事务的工作机制 326
16.3.5
自动提交事务 328
16.3.6 事务的并发问题 328
16.3.7
事务的隔离级别 329
16.4 锁 330
16.4.1
SQL Server锁机制 330
16.4.2 锁模式 330
16.4.3
锁的粒度 331
16.4.4 查看锁 332
16.4.5
死锁 332
16.5 分布式事务处理 333
16.5.1
分布式事务简介 333
16.5.2 创建分布式事务 334
16.5.3
分布式处理协调器 334
16.6 小结 335
16.7
经典习题与面试题
第17章 数据库的性能优化
17.1
数据库设计 337
17.1.1 规范化与非规范化 337
17.1.2
选择适当的数据类型 339
17.1.3 索引的选择 340
17.2
查询优化 340
17.2.1 避免使用“*” 341
17.2.2
避免负逻辑 341
17.2.3 列操作 341
17.2.4
避免使用DISTINCT 342
17.2.5 存储过程 342
17.3
考虑并行 343
17.4 索引操作 344
17.4.1
避免在索引列上进行运算 345
17.4.2 避免在索引列上用OR运算符 345
17.4.3 避免在索引列上用IS NULL 346
17.5
小结 346
17.6 经典习题与面试题 347
第18章
云计算、大数据与云数据库
18.1 云计算概述 348
18.1.1
什么是云计算 348
18.1.2 云计算的起源 349
18.1.3
云计算的特点和优势 350
18.1.4 云计算的现状 351
18.1.5
云计算的应用领域 352
18.2 大数据概述 353
18.3
NoSQL数据库 355
18.3.1 传统关系型数据库及其问题 355
18.3.2 NoSQL数据库概述 356
18.3.3
NoSQL数据库的优劣 357
18.3.4 NoSQL数据库的发展趋势 358
18.4 几种主要的云数据库 358
18.5
SQL Server 2016的云功能 360
18.5.1
数据文件部署到Azure云环境 360
18.5.2 备份到Windows Azure存储
362
18.6 小结 363
第19章
企业ERP管理系统
19.1 系统分析 364
19.1.1
需求分析 364
19.1.2 可行性分析 365
19.2
系统设计 365
19.2.1 系统目标 365
19.2.2
系统功能结构 365
19.2.3 系统业务流程 366
19.2.4
命名规范 367
19.3 数据库与数据表设计 368
19.3.1
数据库分析 368
19.3.2 数据库概念设计 368
19.3.3
数据库逻辑设计 370
19.3.4 数据表逻辑关系 373
19.4
小结 374
第20章 人事管理系统
20.1
系统分析 375
20.1.1 需求分析 375
20.1.2
可行性分析 377
20.2 数据库设计 377
20.2.1
数据库需求分析 377
20.2.2 数据库概念设计 377
20.2.3
数据库逻辑设计 379
20.2.4 数据表逻辑关系 380
20.2.5
创建数据库 380
20.3 小结 382