- SQL语言与数据库操作技术大全
- 马军等编著
- 1572字
- 2020-08-26 17:20:23
第1章 数据库系统与SQL语言概述
数据库系统的发展经历了层次模型和网状模型数据库系统、关系模型数据库系统、结合了面向对象技术的数据库系统三个阶段。目前应用最广泛的数据库系统仍然为关系数据库系统,其代表产品如SQL Server、Oracle、DB2等。关系数据库系统主要通过SQL(Structured Query Language)语言进行查询和存取数据库中的数据。本章将主要介绍一些有关数据库系统和SQL语言的基础知识,为后面章节的学习打下基础。
1.1 数据库系统与数据模型
数据库系统本质上是一个使用计算机存储记录的系统。数据库本身可被看作一种电子文件柜;也就是说,它是收集计算机数据文件的仓库或容器。系统用户可以对这些文件执行一系列的操作。
1.1.1 基本术语
本节将对数据库使用中的一些常用术语进行简单介绍。
1.数据(Data)
描述事物的符号记录称为数据。数据是数据库中存储的基本对象,数据的种类很多,主要包括文字、图形、图像、声音、学生的档案记录、货物的运输情况等,它们都可以经过数字化后存入计算机。
2.数据库(Database,简称DB)
数据库,顾名思义,就是存放数据的仓库,过去人们把数据放在文件柜里,现在人们借助计算机和数据库技术,科学地保存和管理大量复杂的数据,以便能方便而充分地利用这些宝贵的信息资源。
所谓数据库是长期存储在计算机内、有组织、可共享的数据集合,数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户所共享。
3.数据库管理系统(Data Base Management System,简称DBMS)
数据库管理系统是指数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分。数据库系统的一切操作,包括查询、更新以及各种控制,都是通过DBMS进行的。
DBMS总是基于某种数据模型的,因此可以把它看成某种数据模型在计算机系统上的具体实现。
数据库管理系统是数据库系统的一个重要组成部分,它为用户提供一个可以方便、有效地存取数据库信息的环境。
4.数据库系统(Database System,简称DBS)
数据库系统是指在计算机中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。应当指出的是,数据库的建立、使用和维护等工作只靠一个DBMS远远不够,还要有专门的人员来完成,这些人被称为数据库管理员(Database Administrator,简称DBA)。
数据库系统的构成如图1.1所示。
图1.1 数据库系统的构成
1.1.2 数据库技术的发展
数据库主要用于数据处理。随着数据处理量的不断增加,数据管理技术应运而生,其演变过程随着计算机硬件和软件的发展,大体经历了文件系统、层次模型和网状模型数据库、关系模型数据库以及新一代数据库系统几个阶段。
1.文件系统阶段
在数据库系统出现前,数据以文件为单位,与计算机程序脱离,由操作系统统一管理。用户的程序与数据可分别存放在外存储器上,各个应用程序可以共享一组数据,实现了以文件为单位的共享。
由于数据的组织仍然是面向程序的,所以存在大量的数据冗余,且不能方便地修改和扩充数据的逻辑结构。同时,由于文件之间是相互孤立的,因而它们不能反映现实世界中事务之间的联系。文件系统阶段程序与数据的关系如图1.2所示。
图1.2 文件系统阶段程序与数据的关系
2.层次模型和网状模型数据库系统
层次模型和网状模型数据库系统也称为第一代数据库,其先驱是1969年IBM提出的IMS(Information Management System,层次数据库模型)。该种数据库系统以有向图为基础,一次一个记录地存取数据,采用的是过程化的存取方法。
简单的层次模型和网状模型数据库系统存储的数据结构,如图1.3所示。
图1.3 层次模型和网状模型数据库系统存储的数据结构
3.关系模型数据库系统
关系模型数据库系统也称为第二代数据库,诞生于20世纪70年代。首先由IBM提出了关系模型,奠定了关系数据库技术的基础;而IBM、System R和Berkeley INGRES等系统的出现,标志着关系型数据库的成熟。
关系模型数据库系统以集合代数为基础,一次一个集合地存取数据,采用的是非过程化的存取方法。目前广泛使用的数据库软件都是基于关系模型的关系数据库管理系统。关系模型是现代数据库产品最广泛实现的模型,而且正是关系模型构成了SQL的基础。
关系模型与以往的模型不同,它是建立在严格的数学概念基础上的。在用户看来,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。现以图1.4所示的学生登记表为例,简单介绍关系模型中的一些术语。
图1.4 关系模型的表结构
· 关系(Relation):一个关系对应通常说的一张表,如图1.4所示的表。
· 元组(Tuple):表中的一行即为一个元组。
· 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即为属性名;如图1.4所示的表中有6列,对应6个属性(学号、姓名、年龄、性别、系名和年级)。
· 主键(Key):表中的某个属性组,它可以唯一确定一个元组,如图1.4所示的表中的学号,可以唯一确定一个学生,也就成为本关系的主键。
· 域(Domain):属性的取值范围,如人的年龄一般在1~150岁之间,性别的域是(男,女)。
· 分量:元组中的一个属性值。
· 关系模式:对关系的描述一般表示为:
关系名(属性1,属性2,…,属性n)
例如,上面的关系可描述为:
学生(学号,姓名,年龄,性别,系名和年级)
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。
4.新一代数据库系统
随着新领域CAD、CAM、地理信息系统(GIS)、知识库系统、实时系统的出现和发展,对数据库系统提出了更高的功能要求,如存储和处理复杂对象,支持复杂数据类型,对常驻内存的对象管理及支持大量对象的存取和计算,实现程序设计语言和数据库语言无缝地集成,支持长事务和嵌套事务的处理等。而传统数据库系统由于其自身的局限性很难实现上述功能,因此提出了新一代数据库技术,即第三代数据库系统的概念。
第三代数据库系统对数据模型有了新的发展。数据技术与其他相关技术相结合,如与分布处理技术相结合,出现了分布式数据库;与面向对象技术相结合,出现了面向对象数据库技术等。另外,数据库技术被应用到特定的领域中,出现了许多新的面向领域的数据库技术,如应用于CAD、CAM和CIM等领域的工程数据库、统计数据库和空间数据库等。
总之,第三代数据库系统还处于发展阶段,其研究目标是提出一个支持各种应用领域的统一的数据库系统。
1.1.3 数据模型
数据库中存储的是数据,这些数据反映了现实世界中有意义、有价值的信息,它不仅反映数据本身的内容,而且反映数据之间的联系。那么如何抽象表示、处理现实世界中的数据和信息呢?这就需要使用数据模型这个工具。数据模型是数据库中用于提供信息表示和操作手段的形式框架,它是将现实世界转换为数据世界的桥梁。
数据模型是数据库系统的核心和基础,如前面提到的网状模型、层次模型、关系模型等。各种机器上实现的DBMS软件都是基于某种数据模型的。
数据模型包括3种基本要素:数据结构、数据操作和完整性约束。
1.数据结构
数据结构是描述系统的静态特性,即组成数据库的对象类型。它包括以下两方面:
· 数据本身:类型、内容、性质。例如关系模型中的域、属性、关系等。
· 数据之间的联系:数据之间是如何相互关联的,例如关系模型中的主键、外键之间的联系等。
在数据库系统中,一般按数据结构的类型来命名数据模型。
2.数据操作
数据操作描述系统的动态特性,即对数据库中对象的实例允许执行的操作的集合,包括操作及操作规则。一般有检索、更新(插入、删除、修改)操作。
数据模型要定义操作含义、操作符号、操作规则,以及实现操作的语言。
3.完整性约束
数据的约束条件是完整性规则的集合,规定数据库状态及状态变化所应满足的条件,以保证数据的正确、有效、相容。例如关系模型中的实体完整性、参照完整性、用户定义的完整性等。
1.2 数据库系统的体系结构
从数据库管理角度看,数据库系统通常采用三级模式结构,这是数据库管理系统内部的系统结构。从数据库最终用户角度看,数据库系统的结构分为集中式结构(又可分为单用户结构、主从式结构)、分布式结构、客户/服务器结构,这是数据库系统外部的结构。
1.2.1 数据库系统的三级模式结构
模式(Schema)是数据库中全体数据的逻辑结构和特征的描述。模式的一个具体值称为模式的一个实例,同一模式可以有很多实例。模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。
虽然实际的数据库管理系统产品种类很多,它们支持不同的数据模型,使用不同的数据库语言,建立在不同的操作系统之上,数据的存储结构也各不相同,但它们在体系结构上都具有相同的特征,即采用三级模式结构,并提供两种映像功能。
数据库系统的三级模式结构是指数据库系统由外模式、概念模式、内模式三级构成,如图1.5所示。
1.概念模式
概念模式又称逻辑模式,是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图,它是数据库模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。
概念模式实际上是数据库在逻辑级上的视图,一个数据库只有一个概念模式。定义概念模式时,不仅要定义数据的逻辑结构,例如数据记录由哪些数据项组成,以及数据项的名字、类型、取值范围等,而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求。DBMS提供模式描述语言(模式DDL)来严格地定义模式。
图1.5 数据库系统的三级模式结构
2.外模式(External Schema)
外模式也称子模式或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
外模式通常是模式的子集。一个数据库可以有多个外模式。由于它是各个用户的数据视图,如果不同的用户在应用需求、看待数据的方式、对数据保密的要求等方面存在差异,则其外模式描述就是不同的。同一外模式可以被一个用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。
外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。DBMS提供子模式描述语言(子模式DDL)来严格地定义子模式。
3.内模式(Internal Schema)
内模式也称存储模式(Storage Schema),一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。例如,记录的存储方式是顺序存储、按照B树结构存储还是按Hash方法存储,索引按什么方式组织,数据的存储记录结构有何规定等。
DBMS提供内模式描述语言(内模式DDL,或存储模式DDL)来严格地定义内模式。
数据库系统的三级模式是对数据的3个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。为了能够在内部实现这3个抽象层次的联系和转换,DBMS在这三级模式之间提供了两层映像:
· 外模式/概念模式映像。对应于同一个概念模式,可以有任意多个外模式。外模式/概念模式的映像定义某一个外模式和概念模式之间的对应关系,这些映像定义通常包含在各自的外模式中,当概念模式改变时,外模式/概念模式的映像要做相应的改变(由DBA负责)以保证外模式保持不变。
· 概念模式/内模式映像。概念模式/内模式映像定义数据逻辑结构和存储结构之间的对应关系,它说明逻辑记录和字段在内部是如何表示的。这样当数据库的存储结构改变时,可相应修改概念模式/内模式的映像,从而使模式保持不变。
正是这两层映像保证了数据库系统中的数据有较高的逻辑独立性和物理独立性。
1.2.2 数据库管理系统(DBMS)
数据库管理系统(Data Base Management System,简称DBMS)是指数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分。数据库系统的一切操作,包括查询、更新以及各种控制,都是通过DBMS进行的。
DBMS是一个庞大的软件系统,这个软件系统包含了一大批支持各种不同功能的软件,这些软件从内容上可以分为以下3大部分:
· 数据描述语言(DDL)及其翻译程序;
· 数据操纵/查询语言(DML)及其翻译程序;
· 数据库管理例行程序。
1.数据描述语言
数据描述语言(Data Description Language,DDL)用于定义数据库的各级数据结构及它们之间的映像,定义各种完整性约束和保密限制条件。为了便于计算机处理,DBMS配置了相应的翻译处理程序,这些程序接受相应DDL定义,对其进行语法、语义检查,把它们翻译为内部格式存储在数据字典中。DDL翻译程序还根据模式定义负责建立数据库的框架,等待装入数据。
2.数据操纵/查询语言
数据操纵语言(Data Manipulation Language,DML)提供用户或应用程序访问数据库系统的接口。DML语句一般是集合型的操作,它是一种更高级的数据处理语言。尤其是关系数据库的操作语言,它不需要用户提出如何实现某一种操作,只需用户给出要处理的数据目标和相应的操作类型,系统可自动实现用户的要求。
在数据操纵方面,有DML处理程序、终端查询语言解释程序、数据存取程序、数据更新程序等,它们用于对用户的操纵请求进行语法、语义检查,并最终完成对数据库的存取操作。
3.数据库管理例行程序
DBMS的真正核心部分是它的运行控制系统,它由支持数据库系统全部运行过程的各类例行程序组成。这些例行程序主要有以下几方面:
· 存取控制例行程序;
· 安全性控制例行程序;
· 完整性控制例行程序;
· 事务管理例行程序;
· 恢复例行程序;
· 监控例行程序。
DBMS的组成及工作过程可简单表示为如图1.6所示。
图1.6 DBMS的组成及工作过程
1.2.3 数据库系统的工作流程
数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。下面以用户查询数据库中的一组数据为例,简单介绍一下数据库系统的工作流程。数据库系统的工作流程框图如图1.7所示。
图1.7 数据库系统的工作流程框图
(1)DBMS首先对数据查询语句进行语法检查,而后从数据字典中找到该用户对应的外模式,同时进行权限检查。若发现错误,则将错误信息返回给用户。
(2)DBMS根据找到的外模式,利用概念模式/外模式映像,将其映像到概念模式,确定概念模式应该读入哪些数据。
(3)DBMS利用内模式/概念模式映像,将概念模式映像到内模式,确定数据库应读入哪些物理记录及其具体的地址。
(4)DBMS根据地址信息向操作系统发出读取记录的命令。
(5)操作系统执行读取数据的命令,并将数据从硬盘读入系统缓冲区,将执行结果通知DBMS。
(6)DBMS根据查询语句及数据字典定义的信息,将系统缓冲区中的数据转换成用户所需的记录格式。
(7)DBMS将数据记录从系统缓冲区传送到用户工作区。
由此可见,在数据库系统中,数据库管理系统即DBMS处于中心地位。
★ 说明 ★
DBMS并不是直接读取数据库中的数据,而是通过操作系统访问数据库,数据库系统是基于操作系统的。
1.3 关系数据库的简单介绍
所谓关系数据库是指以关系数据模型为基础的数据库系统。目前,基于关系数据模型(关系系统)的数据库管理系统仍然在数据库市场上占据主导地位。最主要的产品包括:IBM公司的DB2、Computer Associates International公司的Ingres II、Informix Software公司的Informix Dynamic Server、微软公司的Microsoft SQL Server、Oracle公司的Oracle、Sybase公司的Sybase Adaptive Server等。
关系数据模型最重要的特点之一是具有坚实的数学理论基础。关系数据理论包括两方面内容,其一是关系数据库设计的理论基础——数据依赖与规范化理论;其二是数据库查询的实现与优化理论,这两方面内容构成了数据库设计和应用的最重要的理论基础。本节简单介绍数据依赖与关系规范化理论,这对关系数据库的设计至关重要。
1.3.1 关系数据库的基本特性
关系数据库是基于关系系统的,那么究竟什么是关系系统呢?直观地说,关系系统是这样的:
· 结构化方面:数据库中的数据对用户来说是表,并且只是表;
· 完整性方面:数据库中的表需要满足一定的完整性约束;
· 操纵性方面:用户可以使用操作符进行表操作。例如,为了检索数据,需要使用从一个表导出另一个表的操作符。
关系系统和非关系系统的区别在于,关系系统的用户把数据看作表,而且只能是表。非关系系统的用户则把数据看作其他的数据结构,代替或者扩展关系系统中的表结构。
关系是关系系统的核心,是汇集在表结构中的行和列的集合。每个关系由一个或多个属性(列)组成,属性将类型相似的数据归纳在一起。属性与关系直接的关联如图1.4所示。
图1.4中的关系是由学号、姓名、年龄、性别、系名和年级6个属性组成的。数据以数组(行)的方式存储在关系中。每个数组代表相关数据的一个记录。
1.3.2 关系数据库的设计规范
关系数据库是E.F.Codd博士于1970年,在“一种存储大型共享数据的关系模型”的论文中提出的。一个完美的、完全符合数据库技术的关系数据库系统,需要满足Codd博士提出的12条法则。
关系数据库实际上就是从多种可能的关系组合中,选取一个合适的(或者说性能好的)关系模式集合作为数据库的模式。有关Codd的12法则以及关系数据库规范设计的范式本书不作详细介绍。为了对关系模式集合的性能好坏有一个直观的认识,这里用一个实例组成不同的关系模式集合,产生不同的影响,简单说明数据库模式设计的好与坏。
例如:某校要建立一个数据库来描述学生和系的一些情况,面临的对象有:学生的学号(S#)、学生的姓名(SNAME)、系的名称(DEPT)、系的负责人(MN)、学生选修的课程名称(CNAME)和学生选修课的成绩(GRADE)。上述对象之间有如下对应关系:
· 一个系有若干个学生,但一个学生只属于一个系。
· 一个系只有一个负责人。
· 一个学生可以选修多门课程,每门课程有若干个学生选修。
· 每个学生学习每一门课程有一个成绩。
依据上述情况,可考虑以下两种数据库模式的选择方案:
方案1:采用一个总的关系模式:
SA(S#,SNAME,DEPT,MN,CNAME,GRADE)
方案2:采用三个关系模式:
SB(S#,SNAME,DEPT) DT(DEPT,MN) SC(S#,CNAME,GREDE)
比较起来,第一个方案可能带来下列问题:
· 数据冗余。如果某个学生选修多门课程,则由于每选修一门课程必须存储一个数据记录,因此,他的姓名及其所在系的信息将被重复保存。
· 修改异常或潜在的不一致性。由于数据存储冗余,当更新某些数据项(如学生所在的系)时就有可能一部分涉及的元组被修改,而另一部分元组却没有修改,这就造成了存储数据的不一致性(比如一个学生两个系)。
· 插入异常。如果一个系刚刚成立,尚无学生;或者虽然有了学生,但尚未安排课程,那么就无法把这个系及其负责人的信息存入数据库,这是因为在关系模式SA中,主关键字为(S#,CNAME),而关系模型的实体完整性约束不允许主关键字属性为空值。因此,在学生未选修课程或系里未分配学生之前,相应元组无法插入。
· 删除异常。如果某个系的学生全部毕业了,在删除该系全体学生信息的同时,把这个系及其负责人的信息也一同删去了,这显然是人们所不希望的。
由于上述几个问题,方案1不是一个好的数据库模式设计,而在方案2中这些问题都不存在,因而方案2优方案1。一个好的模式应当不会发生插入异常和删除异常,冗余应尽可能少,从而避免造成更新异常。
上述关系模式中的异常统称为存储异常。现在的问题在于,产生这种存储异常的根源何在?
对上例的两个数据库模式方案进行对比研究可以发现,存储异常的存在与每个关系模式内部各属性值之间的内在相关性有直接关系。在关系模式SA中主关键字为(S#,CNAME),它们的值唯一地决定其他所有属性的值,形成一种函数依赖关系,即属性SNAME、DEPT、MN、GRADE的值都函数依赖于主关键字。但另一方面,这些属性对于主关键字的函数依赖程度又是有所不同的,GRADE是真正函数依赖于主关键字,而SNAME、DEPT的值则实际上只受S#值的影响而与CNAME无关,即只是部分函数依赖于主关键字(S#,CNAME),而MN是直接依赖于DEPT而间接传递依赖于S#,正是这种部分函数依赖和传递函数依赖造成了上述的存储异常。
1.4 SQL语言概述
SQL全称为Structured Query Language(结构化查询语言),它利用一些简单的句子构成基本的语法来存取数据库的内容。由于SQL简单易学的特点,目前它已经成为关系数据库系统中使用最广泛的语言。
1.4.1 SQL语言的发展
SQL语言于1974年,由Boyce和Chamberlin首先提出。在1975—1979年间,在IBM San Jose Research Lab的关系数据库管理系统原型System R中,最早使用了SQL语言。
为了避免各产品之间的SQL语法不兼容,因此由ANSI(American National Standards Institute,美国国家标准局)制定SQL-92标准,简称SQL2。定义出SQL的关键词与语法标准,以提高各家产品在SQL语法上的兼容性。
7年之后,即1999年,SQL标准的最新版本SQL-99(SQL3)发布,对SQL-92版本又新增了一些特性,标志着SQL在满足用户需求方面又前进了一大步。
目前,SQL标准的最新版为SQL-2003。大体而言,业界的产品都是在包含ANSI SQL的基础下,再扩充自家产品的功能,以求能展现出本身的特色。
★ 说明 ★
目前,大部分DBMS产品都支持SQL,它已成为操作数据库的标准语言。然而,各DBMS产品对SQL的支持程度也不尽相同。
1.4.2 SQL语言的功能
使用SQL语言可以创建、维护、保护数据库对象,并且可以操作对象中的数据。具体来讲,SQL语言可实现的功能如下:
· 数据定义语言(Data Definition Language,DDL):主要用于创建、修改或删除数据库对象,如表、视图、索引等。具体功能如下:
定义、删除、修改关系模式(基本表);
定义、删除视图(View);
定义、删除索引(Index)。
· 数据操纵语言(Data Manipulation Language,DML):主要用于查询、添加、修改或删除存储在数据库对象中的数据。具体如下:
数据库中、表中数据的查询;
数据的增、删、改等操作。
· 数据控制语言(Data Control Language,DCL):可以控制访问数据库中特定对象的用户,还可以控制用户对数据库的访问类型。主要功能为用户访问权限的授予、收回。
1.4.3 SQL语言的执行形式
SQL语言最主要的执行形式有:交互式SQL、嵌入式SQL以及CLI(调用层接口)等方式。
1.交互式SQL
交互式SQL为直接执行SQL语句,一般DBMS都提供联机交互工具。可以从前端应用程序,如SQL Server中的Query Analyzer(查询分析器)、Oracle中的SQL*Plus Worksheet,直接与SQL服务器上的数据库进行通信。只要把查询输入到应用程序窗口,然后执行SQL语句,就可以获取查询结果。这种方法可以迅速检查数据、验证连接和观察数据库对象。SQL语句由DBMS来进行解释。
2.嵌入式SQL
在这种方式中,将SQL语句嵌入到高级语言(宿主语言)中,使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力。例如,可以将SQL语句嵌入C应用程序代码中。在编译代码之前,预处理器将分析SQL语句,并把这些语句从C代码中分离出来。SQL代码被转换成一种能为RDMS理解的格式,其余的C代码则按照正常的方式进行编译。
该种方式一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句。
3.CLI(调用层接口)
CLI可以通过接口调用SQL语句。CLI定义了一套可以从宿主语言调用的公共函数,即提供一套API,通过函数调用,实现对DBMS的操作。常用的CLI包括DBLib、OCI、 ODBC、JDBC等,将逐步替代嵌入式SQL。
★ 说明 ★
本书中,SQL代码实例的运行采用的是交互式,即在SQL Server中的Query Analyzer (查询分析器)环境下直接实现。
1.4.4 SQL语句结构
SQL语言是由一些简单的句子构成基本的语法的,所有的SQL语句均有自己的格式,典型的SQL语句(查询语句)结构如图1.8所示。
图1.8 典型的SQL语句结构
SQL语法的基础是子句(clause),子句中会包括一些关键词(keyword)。每条SQL语句均由一个关键词开始,该关键词描述这条语句要产生的动作。SQL中常用的关键词及其功能如表1.1所示。
表1.1 SQL中常用的关键词及其功能
★ 说明 ★
由于各DBMS产品对SQL的支持程度不尽相同,表1.1所示的SQL关键词是针对SQL Server支持的Transact-SQL语言而言的。
1.4.5 SQL的环境
SQL环境是指数据在其中可以存在、对数据的SQL操作可以执行的框架。实际上,可以把SQL环境看作运行在某个设备上的数据库管理系统。
基本的数据库元素,比如基本表、视图等都是在SQL环境中定义的。SQL环境包含模式、目录等元素,其关系如图1.9所示。
1.模式对象
模式对象位于目录的底层,SQL数据就存储在这一层。通过使用SQL,就可以定义SQL对象,并可以修改、存储和操作对象中的数据。实际上,本书所做的大部分工作都直接影响到模式对象。
SQL-99标准定义了表、视图、域、约束、触发器等11种类型的模式对象,这些对象构成了SQL环境的基础。
图1.9 SQL环境结构关系
2.模式(Schema)
这里的模式是指数据库模式,而不是关系模式,是表、视图、域等数据库模式对象的聚集,它是整个SQL环境体系结构的基本单位。
在SQL中,模式的创建采用CREATE SCHEMA语句,其语法如下所示。
CREATE SCHEMA <模式名> <模式元素>
比如,创建一个图书管理模式,包括图书信息、读者信息两个关系(表)和不能再借图书的读者视图,其说明简要描述如下:
CREATE SCHEMA LibrarySchema --创建模式 CREATE TABLE BookInfo --创建表 CREATE TABLE Reader --创建表 CREATE VIEW FullReader --创建视图
如果要把图书管理模式作为当前模式,则设置如下所示。
SET SCHEMA LibrarySchema
于是,随后定义的表、视图等模式元素均属于管理模式。
3.目录(Catalog)
SQL目录包括的是对某一单个数据库的描述。目录是模式的聚集,每个目录都有一个或多个模式。每个目录都包含INFORMATION-SCHEMA(信息模式)特殊模式,该模式包含该目录中所有模式的信息。
在目录中建立模式类似于在模式中建立表或视图之类的模式元素。可以用如下语句建立图书管理目录:
CREATE CATALOG LibraryCatalog
后面跟着属于图书管理目录的模式及模式的说明。同样,可以用SET CATALOG(设置目录)语句设置当前目录。例如,要把图书管理目录作为当前目录,可进行如下设置:
SET CATALOG LibraryCatalog;
于是,随后定义的模式将属于学生目录。
★ 说明 ★
本节主要对SQL环境涉及的概念作一下简单介绍,在SQL的实际应用中,很少涉及模式和目录的创建和使用。
1.4.6 SQL DBMS的客户机/服务器模型
在数据库的使用中,经常用到的是客户机/服务器模型。关系DBMS模型和SQL均非常适合于使用客户机/服务器模型。其工作过程可简单描述如下:
·运行在客户机上的应用程序接收用户输入并形成SQL语句,然后将其发送到服务器上的DBMS。
· DBMS翻译并执行SQL命令,并将结果发送回客户端(工作站)。
· 运行在客户端的应用程序格式化向用户显示结果。
SQL的客户程序和服务程序与连接、会话和模块这三个概念紧密地联系在一起。SQL的客户程序和服务程序的相互作用如图1.10所示。
图1.10 客户程序和服务程序的相互作用
1.连接
在客户端上运行包含SQL的程序,则需要连接服务程序。可用如下的SQL连接语句,在客户程序和服务程序之间建立连接:
CONNECT TO <服务器名> AS <连接名>
用户可以建立几个连接,但在任何时间只能有一个是活动的。可以采用如下的命令切换连接:
Set Connection <连接名>
最后,访问完毕需要断开连接,语法如下所示。
Disconnect <连接名>
2.会话
当连接激活时,所执行的SQL操作将在客户程序和服务程序之间形成请求——响应式的交往,这种操作序列称为会话(Session)。SQL请求通过会话与SQL服务器操作。
会话与建立它的连接处于同一状态。当连接处于待用状态时,会话也处于待用状态,当连接被激活时,会话也被激活。每个会话都有当前目录和该目录中的当前模式。
3.模块
SQL实现至少为客户端用户提供如下3种类型的应用程序(称为模块,Module)之一:
· 通用SQL接口,如交互式SQL。
· 嵌入式SQL,如嵌入于宿主语言中。
· 实际模块,如存储过程等。
模块的执行称为SQL代理,在图1.10中,给出了一个模块和一个SQL代理,并把二者作为一个整体,调用SQL客户程序来建立连接。
★ 说明 ★
模块与SQL代理之间的差别类似于程序和处理之间的差别,前者为代码,而后者是代码的执行。
1.4.7 SQL语言的扩展
ANSI(American National Standards Institute,美国国家标准协会)制订了结构化查询语言(SQL)标准。而当今数据库市场上许多不同的厂商提供了SQL的多种实现,因此用户将面对这些不同的SQL变体。
这些不同版本的SQL的相似之处就是对ANSI标准的实现。然而,由于不同的SQL实现者自定义了不同的编程对象,并对语言进行了扩展,这就使不同的SQL在特定平台上具有唯一性,如T-SQL(Transact-SQL)是Microsoft公司对此标准的一个实现。Microsoft SQL Server 2000实现了ANSI-92标准,也就是ANSI在1992年制订的标准;而Microsoft SQL Server 2005实现了ANSI-99。
★ 说明 ★
要特别留意实现这个词,不论是2000版或者2005版,T-SQL并不完全服从ANSI标准。不仅T-SQL如此,Oracle的P/L、SQLSybase的SQLAnywhere和开源的MySQL也一样,每个实现都在既定标准上有所偏离,有各自不同的扩展和变化。
ANSI定义了3个遵从性级别:入门级(Entry)、中级(Intermediate)和完整级(Full),T-SQL遵从ANSI的入门级标准。理论上说,如果在使用SQL时严格遵从ANSI所定义的功能,则在Microsoft SQL Server上写的代码也能在任何兼容ANSI的平台上工作。当编写跨平台查询时,需要加倍小心,以保证所写的代码在语法上完美地符合所有可能被影响到的平台。然而,需要编写可在多个平台上运行的查询的人毕竟只是少数,所以ANSI标准的作用只是提供指导方针,以保证查询语言是用来操作数据的,而不是通常意义上的程序设计。
因此,离开了DBMS而纯粹讨论SQL标准,意义不大。本书将围绕应用最广泛的Microsoft SQL Server 2005数据库系统,介绍Transact-SQL语言的基本使用。
1.5 小结
本章重点介绍了数据库系统、关系数据库的设计以及SQL语言的一些基础知识,为后面Microsoft SQL Server 2005数据库系统以及Transact-SQL语言的讲解打下基础。