MySQL 从入门到项目实践(超值版)
上QQ阅读APP看书,第一时间看更新

第2章
数据库初探

◎本章教学微视频:14个 38分钟

学习指引

在学习MySQL数据库操作之前,读者需要了解数据库的相关知识,包括数据库的基础知识、数据库的技术构成、什么是关系型数据库模型、数据依赖与范式、常见关系型数据库管理系统的区别、MySQL体系结构等,本章就来分别介绍。

重点导读

• 了解数据库的基本概念。

• 熟悉数据库的技术构成。

• 熟悉关系型数据模型。

• 理解关系型数据模型中的数据依赖与范式。

• 熟悉常见的关系型数据库管理系统。

• 理解MySQL体系结构。

2.1 快速认识数据库

数据库是由一批数据构成的有序集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。本节将介绍数据库中的一些基本概念,包括数据库的定义、数据表的定义和数据类型等。

2.1.1 什么是数据库

数据库的概念诞生于60年前,随着信息技术和市场的快速发展,数据库技术层出不穷,随着应用的拓展和深入,数据库的数量和规模越来越大,其诞生和发展给计算机信息管理带来一场巨大的革命。

数据库的发展大致划分为人工管理阶段、文件系统阶段、数据库系统阶段和高级数据库阶段。其种类大概有3种,即层次式数据库、网络式数据库和关系式数据库。不同种类的数据库按不同的数据结构来联系和组织。

对于数据库的概念,没有一个完全固定的定义,随着数据库历史的发展,定义的内容也有很大的差异,其中一种比较普遍的观点认为数据库(Database,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统,即数据库包含两层含义——保管数据的“仓库”以及数据管理的方法和技术。

数据库的特点包括实现数据共享,减少数据冗余;采用特定的数据类型;具有较高的数据独立性;具有统一的数据控制功能。

2.1.2 数据库的原理

数据库(Database)是一些相关数据的集合,用户可以用一定的原则与方法添加、编辑和删除数据的内容,进而对所有数据进行搜索、分析及对比,取得可用的信息,产生所需的结果。

在一个数据库中不是只能保存一种简单的数据,可以将不同的数据内容保存在同一个数据库中,例如在进销存管理系统中,可以同时将货物数据与厂商数据保存在同一个数据库文件中,这样在归类及管理时较为方便。

若不同类的数据之间有关联,还可以彼此使用。例如,可以查询出某种产品的名称、规格及价格,而且可以利用其厂商编号查询到厂商名称及联系电话。通常称保存在数据库中的不同类别的记录集合为数据表(Table),在一个数据库中可以保存多个数据表,而每个数据表之间并不是互不相干的,如果有关联,可以协同作业、彼此合作。数据库关联如图2-1所示。

图2-1 数据库关联

每一个数据表都由一个个字段组合起来,例如,在产品数据表中可能会有产品编号、产品名称和产品价格等字段,只要按照一个个字段的设置输入数据即可完成一个完整的数据库,如图2-2所示。

图2-2 数据库表

这里有一个很重要的概念,一般人认为数据库是保存数据的地方,这是不对的,其实数据表才是真正保存数据的地方,数据库是放置数据表的场所。

2.1.3 数据表

在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,例如数据类型、数据宽度等。

2.1.4 数据类型

数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。

表中的每一个字段就是某种指定数据类型,例如student表中的“学号”字段为整数数据,“性别”字段为字符型数据。

2.1.5 主键

主键(PRIMARY KEY)又称主码,用于唯一地标识表中的每一条记录。用户可以定义表中的一列或多列为主键,注意主键列上不能有两行相同的值,也不能为空值。假如定义student表,该表给每一个学生分配一个“学号”,该编号作为数据表的主键,如果出现相同的值,将提示错误,系统不能确定查询的究竟是哪一条记录;如果把学生的“姓名”作为主键,则不能出现重复的名字,这与现实不相符,因此“姓名”字段不适合作为主键。

2.2 数据库技术构成

数据库系统由硬件部分和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机、存储设备等;软件部分则主要包括DBMS、支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。本节将介绍数据库的技术构成。

2.2.1 数据库系统

数据库系统有以下3个主要组成部分。

• 数据库:用于存储数据的地方。

• 数据库管理系统:用于管理数据库的软件。

• 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。

数据库(Database System)提供了一个存储空间用于存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库中可能包含许多文件,一个数据库系统中通常包含许多数据库。

数据库管理系统(Database Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户与操作系统之间,对数据库进行统一管理。DBMS能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。

数据库应用程序(Database Application)虽然已经有了DBMS,但是在很多情况下DBMS无法满足对数据管理的要求。数据库应用程序的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与DBMS进行通信,访问和管理DBMS中存储的数据,允许用户插入、修改、删除数据库中的数据。

数据库系统如图2-3所示。

图2-3 数据库系统

2.2.2 SQL语言

对数据库进行查询和修改操作的语言叫SQL,SQL的含义是结构化查询语言(Structured Query Language)。SQL有许多不同的类型,有3个主要的标准:对ANSI(美国国家标准机构)SQL修改后在1992年采纳的标准,称为SQL-92或SQL2。最近的SQL-99标准,SQL-99标准从SQL2扩充而来并增加了对象关系特征和许多其他新功能;各大数据库厂商提供不同版本的SQL,这些版本的SQL不仅能包括原始的ANSI标准,而且在很大程度上支持新推出的SQL-92标准。

SQL语言包含以下4个部分。

(1)数据定义语言(DDL):DROP、CREATE、ALTER等语句。

(2)数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

(3)数据查询语言(DQL):SELECT语句。

(4)数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。

2.2.3 数据库访问技术

不同的程序设计语言会有各自不同的数据库访问技术,程序语言通过这些技术执行SQL语句,进行数据库管理,下面介绍几种主要的数据库访问技术。

1.ODBC

ODBC(Open Database Connectivity,开放数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准,这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的一组代码访问不同的SQL数据库管理系统(DBMS)。

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Access、MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

2.JDBC

JDBC(Java Database Connectivity, Java数据库连接)是用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

3.ADO.NET

ADO.NET是微软公司在.NET框架下开发设计的一组用于和数据源进行交互的面向对象类库。ADO.NET提供了对关系数据、XML和应用程序数据的访问,允许和不同类型的数据源以及数据库进行交互。

4.PDO

PDO(PHP Data Object)为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样无论使用什么数据库都可以通过一致的函数执行查询和获取数据。

2.3 关系型数据模型

MySQL数据库属于关系型数据库,所以读者需要了解关系型数据模型的相关知识。

2.3.1 关系型数据模型的结构

建立数据库系统离不开数据模型。模型是对现实世界的抽象,在数据库技术中用模型的概念描述数据库的结构与语义,对现实世界进行抽象,能表示实体类型及实体间联系的模型称为“数据模型”。

数据模型的种类有很多,目前被广泛使用的可分为两种类型。一种是独立于计算机系统的数据模型,完全不涉及信息在计算机中的表示,只是用来描述某个特定组织所关心的信息结构,这种模型称为“概念数据模型”。概念数据模型是按用户的观点对数据建模,强调其语义表达能力,概念应该简单、清晰、易于用户理解,它是对现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。其典型代表就是著名的“实体-关系模型”。

另一种数据模型是直接面向数据库的逻辑结构,它是对现实世界的第二层抽象。这种模型直接与数据库管理系统有关,称为“逻辑数据模型”,包括层次模型、网状模型、关系模型和面向对象模型。逻辑数据模型应该包含数据结构、数据操作和数据完整性约束3个部分,通常有一组严格定义的无二义性语法和语义的数据库语言,人们可以用这种语言来定义、操作数据库中的数据。

在逻辑数据模型的4种模型中,层次模型和网状模型已经很少应用,而面向对象模型比较复杂,尚未达到关系模型数据库的普及程度。目前理论成熟、使用普及的模型就是关系模型。

关系模型是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上是一张二维表格。关系模型用键导航数据,其表格简单,用户只需用简单的查询语句就可以对数据库进行操作,并不涉及存储结构、访问技术等细节。SQL语言是关系数据库的代表性语言,已经得到了广泛的应用。典型的关系数据库产品有DB2、Oracle、Sybase、SQLServer等。

关系数据库是以关系模型为基础的数据库,是根据表、元组、字段之间的关系进行组织和访问数据的一种数据库,它通过若干个表来存取数据,并且通过关系将这些表联系在一起。关系数据库是目前应用最广泛的数据库。关系数据是支持关系模型的数据库,下面先介绍关系数据模型。

目前,在实际数据库系统中支持的数据模型主要有3种,即层次模型(Hierarchical Model)、网状模型(Network Model)和关系模型(Relational Model)。自20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都是支持关系模型的数据库系统,关系模型已经占领市场主导地位。

关系模型有3个组成部分,即数据结构、数据操作和完整性规则。

关系模型建立在严格的数学概念的基础之上,它用二维表来描述实体与实体间的联系。

例如在一个有关学生信息的名为student的表中,每个列包含所有作者的某个特定类型的信息,比如姓名,而每行包含了某个特定作者的所有信息,比如学号、姓名、性别、专业,如图2-4所示。

图2-4 数据库字段

关系模型的基本术语如下。

• 关系(Relation):一个二维表就是一个关系。

• 元组(Tuple):二维表中的一行即为一个元组。

• 属性(Attribute):二维表中的一列即为一个属性,给每个属性取一个名称即属性名。

• 域(Domain):属性的取值范围。

关系模式是对关系的描述,可表示为关系名(属性1,属性2,…,属性n)。例如上面的关系可以描述为学生(学号,姓名,性别,专业)。

一个关系模型是若干个关系模式的集合。在关系模型中,实体以及实体间的联系都用关系来表示。例如学生、课程、学生与课程之间的多对多联系在关系模型中可以如下表示:

学生(学号,姓名,性别,专业)

课程(课程号,课程名,学分)

选修(学号,课程号,成绩)

由于关系模型概念简单、清晰、易懂、易用,并有严密的数学基础以及在此基础上发展起来的关系数据理论,简化了程序开发及数据库建立的工作量,因而迅速获得了广泛的应用,并在数据库系统中占据了统治地位。

2.3.2 关系型数据模型的操作与完整性

关系模型提供了一组完备的高级关系运算,以支持对数据库的各种操作。关系数据库的数据操作语言(DML)的语句分为查询语句和更新语句两大类,查询语句用于描述用户的各类检索要求;更新语句用于描述用户的插入、修改和删除等操作。关系数据操作语言建立在关系代数的基础之上,具有以下特点。

(1)以关系为单位进行数据操作,操作的结果也是关系。

(2)非过程性强:很多操作只需指出做什么,而无须步步引导怎么去做。

(3)以关系代数为基础,借助于传统的集合运算和专门的关系运算,使关系数据语言具有很强的数据操作能力。

下面介绍在数据操作语言中对数据库进行查询和更新等操作的语句。

• SELECT…INTO语句:用于创建一个查询表。

• INSERT INTO语句:用于向一个表中添加一个或多个记录。

• SELECT语句:按指定的条件在一个数据库中查询的结果,返回的结果被看作记录的集合。

• UPDATE语句:用于创建一个更新查询,根据指定的条件更改指定表中的字段值。UPDATE语句不生成结果集,而且在使用更新查询更新记录之后不能取消这次操作。

• DELETE语句:用于创建一个删除查询,可以从列在FROM子句之中的一个或多个表中删除记录,且该子句满足WHERE子句中的条件,可以使用DELETE删除多个记录。

• INNER JOIN操作:用于组合两个表中的记录,只要在公共字段之中有相符的值即可。用户可以在任何FROM子句中使用INNER JOIN运算。这是最普通的连接类型,只要在这两个表的公共字段之中有相符的值,内部连接就将组合两个表中的记录。

• LEFT JOIN操作:用于在任何FROM子句中组合来源表的记录。使用LEFT JOIN运算创建一个左边外部连接。左边外部连接将包含从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

• RIGHT JOIN操作:用于在任何FROM子句中组合来源表的记录。使用RIGHT JOIN运算创建一个右边外部连接。右边外部连接将包含从第二个(右边)表开始的两个表中的全部记录,即使在第一个(左边)表中并没有相符值的记录。

• PARAMETERS声明:用于声明参数查询中的每一个参数的名称及数据类型。PARAMETERS声明是可选的,但是当使用时需要置于任何其他语句之前,包括SELECT语句。

• UNION操作:用于创建一个联合查询,它组合了两个或更多的独立查询或表的结果。所有在一个联合运算中的查询都需要请求相同数目的字段,但是字段不必大小相同或数据类型相同。

根据关系数据理论和Codd准则的定义,一种语言必须能处理与数据库的所有通信问题,这种语言有时也称为“综合数据专用语言”。该语言在关系型数据库管理系统中就是SQL。SQL的使用主要通过数据操作、数据定义和数据管理来实现。其中Codd提出了RDBMS的12项准则。

• 信息准则:关系数据库中的所有信息都应在逻辑一级上用一种方法,即表中的值显示的表示。

• 保证访问准则:依靠于表名、主键和列名,保证能以逻辑的方式访问数据库中的每个数据项。

• 空值的系统化处理:RDBMS支持空值(不同于空的字符串或空白字符串,并且不为0)系统化地表示缺少的信息,且与数据类型无关。

• 基于关系模型的联机目录:数据库的描述在逻辑上应该和普通数据采用同样的方式,使得授权用户可以使用查询一般数据所用的关系语言来查询数据库的描述信息。

• 统一的数据子语言准则:一个关系系统可以具有多种语言和多种终端使用方式(例如表格填空方式、命令行方式等),但是必须有一种语言,它的语句可以表示为具有严格语法规定的字符串,并能全面地支持数据定义、视图定义、数据操作(交互式或程序式)、完整约束、授权、事务控制(事务开始、提交、撤销)等功能。

• 视图更新准则:所有理论上可更新的视图也应该允许由系统更新。

• 高阶的插入、更新和删除:把一个基本关系或导出关系作为一个操作对象进行数据的检索以及插入、更新和删除。

• 数据的物理独立性:无论数据库的数据在存储表示上或存取方法上做任何变化,应用程序和终端活动要都保持逻辑上的不变性。

• 数据的逻辑独立性:当基本表中进行理论上信息不受损害的任何变化时,应用程序和终端活动都要保持逻辑上的不变性。

• 数据完整性的独立性:关系数据库的完整性约束必须是用数据子语言定义并存储在目录中的,而不是在应用程序中加以定义的。至少要支持以下两种约束:实体完整性,即主键中的属性不允许为NULL;参照完整性,即对于关系数据库中每个不同的非空的外码值必须存在一个取自同一个域匹配的主键值。

• 分布的独立性:一个RDBMS应该具有分布独立性。分布独立性是指用户不必了解数据库是否为分布式的。

• 无破坏准则:如果RDBMS有一个低级语言(一次处理一个记录),这一低级语言不能违背或绕过完整性准则以及高级关系语言(一次处理若干记录)表达的约束。

数据库管理系统是对数据进行管理的大型系统软件,它是数据库系统的核心组成部分,用户在数据库系统中的一切操作(包括数据定义、查询、更新及各种控制)都是通过DBMS进行的。

关系模型的完整性规则是对数据的约束。关系模型提供了3类完整性规则,即实体完整性规则、参照完整性规则和用户定义的完整性规则。其中,实体完整性规则和参照完整性规则是关系模型必须满足的完整性约束条件,称为关系完整性规则。

• 实体完整性约束:约束关系的主键中属性值不能为空值。空值(null)就是指不知道或者不能使用的值,它与数值0和空字符串的意义都不一样。

• 参照完整性约束:关系之间的基本约束。如果关系的外键R1与关系R2的主键相符,那么外键的每个值必须在关系R2的主键的值中找到或者是空值。

• 用户定义的完整性约束:它反映了具体应用中数据的语义要求,针对某一具体的实际数据库的约束条件。它由应用环境所决定,反映某一具体应用所涉及的数据必须满足的要求。关系模型提供了定义和检验这类完整性的机制,以便用统一的、系统的方法处理,而不必由应用程序承担这一功能。

2.3.3 关系型数据模型的存储结构

关系型数据模型是以关系数学理论为基础的,用二维表结构来表示实体以及实体之间联系的模型称为关系模型。在关系模型中把数据看成是二维表中的元素,操作的对象和结果都是二维表,一张二维表就是一个关系。关系模型与层次模型、网状模型的本质区别在于数据描述的一致性,模型概念单一。在关系型数据库中,每一个关系都是一个二维表,无论是实体本身还是实体间的联系均用称为“关系”的二维表来表示,它由表名、行和列组成。表的每一行代表一个元组,每一列称为一个属性,这使得描述实体的数据本身能够自然地反映它们之间的联系。传统的层次和网状模型数据库是使用链接指针来存储和体现联系的。尽管关系型数据库管理系统比层次型和网状型数据库管理系统的出现晚了很多年,但关系型数据库以其完备的理论基础、简单的模型、说明性的查询语言和使用方便等优点得到了最广泛的应用。

2.4 关系型数据模型中的数据依赖与范式

在数据库中,数据之间存在着密切的联系。关系数据库由相互联系的一组关系组成,每个关系包括关系模式和关系值两个方面。关系模式是对关系的抽象定义,给出关系的具体结构;关系的值是关系的具体内容,反映关系在某一时刻的状态。一个关系包含许多元组,每个元组都是符合关系模式结构的一个具体值,并且都分属于相应的属性。在关系数据库中每个关系都需要进行规范化,使之达到一定的规范化程度,从而提高数据的结构化、共享性、一致性和可操作性。

关系模型原理的核心内容就是规范化概念,规范化是把数据库组织成在保持存储数据完整性的同时最小化冗余数据的结构的过程。规范化的数据库必须符合关系模型的范式规则。范式可以防止在使用数据库时出现不一致的数据,并防止数据丢失。关系模型的范式有第一范式、第二范式、第三范式和BCNF范式等多种。

在这些定义中,高级范式根据定义属于所有低级的范式,例如第三范式中的关系属于第二范式,第二范式中的关系属于第一范式。下面介绍规范化的过程。

1.第一范式

第一范式是第二和第三范式的基础,是最基本的范式。第一范式包括下列指导原则:

• 数据组的每个属性只可以包含一个值。

• 关系中的每个数组必须包含相同数量的值。

• 关系中的每个数组一定不能相同。

如果关系模式R中的所有属性值都是不可再分解的原子值,那么就称此关系R是第一范式(First Normal Form,1NF)的关系模式。在关系型数据库管理系统中涉及的研究对象都是满足1NF的规范化关系,不是1NF的关系称为非规范化的关系。

2.第二范式

第二范式(2NF)规定关系必须在第一范式中,并且关系中的所有属性依赖于整个候选键。候选键是一个或多个唯一标识每个数据组的属性集合。

3.第三范式

第三范式(3NF)和2NF一样依赖于关系的候选键。为了遵循3NF的指导原则,关系必须在2NF中,非键属性相互之间必须无关,并且必须依赖于键。

对于关系设计,理想的设计目标是按照规范化规则存储数据。但是,在数据库实现的现实世界中将数据解规范化却是通用的惯例,也就是要专门违反规范化规则,尤其是违反第二范式和第三范式。当过于规范化的结构使实现方式复杂化时,解规范化主要用于提高性能或减少复杂性。尽管如此,规范化的目标仍然是确保数据的完整性,在解规范化时应该注意。

2.5 常见的关系型数据库管理系统

常见的关系型数据库管理系统产品有Oracle、SQLServer、Sybase、DB2、Access等。

1.Oracle

Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象存储的数据支持,具有第四代语言开发工具,支持UNIX、Windows NT、OS/2、Novell等多种平台。除此之外,它还具有很好的并行处理功能。Oracle产品主要由Oracle服务器产品、Oracle开发工具、Oracle应用软件组成,也有基于微机的数据库产品,主要满足对银行、金融、保险等企业和事业开发大型数据库的需求。

2.SQL Server

SQL即结构化查询语言(Structured Query Language,SQL)。SQLServer最早出现在1988年,当时只能在OS/2操作系统上运行。2000年12月微软公司发布了SQLServer 2000,该软件可以运行在Windows NT/2000/XP等多种操作系统之上,是支持客户机/服务器结构的数据库管理系统,它可以帮助各种规模的企业管理数据。

随着用户群的不断增大,SQLServer在易用性、可靠性、可收缩性、支持数据仓库、系统集成等方面日趋完美,特别是SQLServer的数据库搜索引擎,可以在绝大多数的操作系统之上运行,并针对海量数据的查询进行了优化。目前SQLServer已经成为应用最广泛的数据库产品之一。

由于使用SQLServer不仅要掌握SQLServer的操作,还要熟练掌握Windows NT/2000 Server的运行机制以及SQL语言,所以非专业人员学习和使用有一定的难度。

3.Sybase

1987年推出的大型关系型数据库管理系统Sybase能运行于OS/2、UNIX、Windows NT等多种平台,它支持标准的关系型数据库语言SQL,使用客户机/服务器模式,采用开放体系结构,能实现网络环境下各节点上服务器的数据库互访操作,技术先进、性能优良,是开发大中型数据库的工具。Sybase产品主要由服务器产品Sybase SQLServer、客户产品Sybase SQLToolset和接口软件Sybase Client/Server Interface组成,还有著名的数据库应用开发工具PowerBuilder。

4.DB2

DB2是基于SQL的关系型数据库产品。在20世纪80年代初期DB2的重点放在大型的主机平台上,到90年代初,DB2发展到中型机、小型机以及微机平台。DB2适用于各种硬件与软件平台。各种平台上的DB2有共同的应用程序接口,运行在一种平台上的程序可以很容易地移植到其他平台。DB2的用户主要分布在金融、商业、铁路、航空、医院、旅游等各个领域,以金融系统的应用最为突出。

5.Access

Access是在Windows操作系统下工作的关系型数据库管理系统。它采用了Windows程序设计理念,以Windows特有的技术设计查询、用户界面、报表等数据对象,内嵌了VBA(全称为Visual Basic Application)程序设计语言,具有集成的开发环境。Access提供图形化的查询工具和屏幕、报表生成器,用户建立复杂的报表、界面无须编程和了解SQL语言,它会自动生成SQL代码。

Access被集成到Office中,具有Office系列软件的一般特点,例如菜单、工具栏等。与其他数据库管理系统软件相比,它更加简单易学,一个普通的计算机用户,即使没有程序语言基础,仍然可以快速地掌握和使用它。最重要的一点是,Access的功能比较强大,足以应付一般的数据管理及处理需要,适用于中小型企业数据管理的需求。当然,在数据定义、数据安全可靠、数据有效控制等方面,它比前面几种数据库产品要逊色不少。

2.6 MySQL体系结构

了解MySQL必须牢牢记住其体系结构图,MySQL是由SQL接口、解析器、优化器、缓存、存储引擎组成的,如图2-5所示。

图2-5 MySQL体系结构

体系结构中各个结构的含义如下。

(1)Connectors:指的是不同语言中与SQL的交互。

(2)Enterprise Management Services & Utilities:系统管理和控制工具。

(3)Connection Pool:连接池。管理缓冲用户连接、线程处理等需要缓存的需求。

(4)SQLInterface:SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。例如SELECT FROM就是调用SQLInterface。

(5)Parser:解析器。在SQL命令传递到解析器的时候会被解析器验证和解析,解析器是由Lex和YACC实现的,是一个很长的脚本。

其主要功能如下:

• 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。

• 如果在分解构成中遇到错误,那么就说明这个SQL语句是不合理的。

(6)Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。它使用“选取-投影-连接”策略进行查询。

例如:

这个SELECT查询先根据WHERE语句进行选取,而不是将表全部查询出来以后再进行gender过滤。

这个SELECT查询先根据id和name进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件连接起来生成最终查询结果。

(7)Caches & Buffers:查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key缓存、权限缓存等。

(8)Pluggable Storage Engines:存储引擎。存储引擎是MySQL中具体与文件打交道的子系统,也是MySQL最具特色的一个地方。从MySQL 5.5之后,InnoDB就是MySQL的默认事务引擎。

2.7 就业面试技巧与解析

2.7.1 面试技巧与解析(一)

面试官:什么是客户机-服务器软件?

应聘者:主从式架构(Client-Server Model)或客户/服务器(Client/Server)结构简称C/S结构,它是一种网络架构,在该网络架构下软件通常分为客户端(Client)和服务器(Server)。

服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在客户/服务器结构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后将结果返回给用户,从而减少了网络数据的传输量。

用户在使用应用程序时,首先启动客户端通过有关命令告知服务器进行连接以完成各种操作,而服务器按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。

这种系统的特点就是客户端和服务器程序不在同一台计算机上运行,这些客户端和服务器程序通常归属不同的计算机。

主从式架构通过不同的途径应用于很多不同类型的应用程序,比如现在人们最熟悉的在因特网上用的网页。当顾客想要在当当网站上买书的时候,计算机和网页浏览器就被当作一个客户端,同时组成当当网的计算机、数据库和应用程序就被当作服务器。当顾客的网页浏览器向当当网请求搜寻数据库相关的图书时,当当网服务器从当当网的数据库中找出所有该类型的图书信息,组合成一个网页,再发送回顾客的浏览器。服务器端一般使用高性能的计算机,并配合使用不同类型的数据库,例如Oracle、Sybase或者MySQL等;客户端需要安装专门的软件,例如浏览器。

2.7.2 面试技巧与解析(二)

面试官:MySQL服务器端实用工具有哪些?

应聘者:MySQL服务器端实用工具如下。

(1)mysqld:SQL后台程序(即MySQL服务器进程)。该程序运行之后客户端才能通过连接服务器访问数据库。

(2)mysqld_safe:服务器启动脚本。在UNIX和NetWare中推荐使用mysqld_safe来启动mysqld服务器。mysqld_safe增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息。

(3)mysql.server:服务器启动脚本。该脚本用于使用包含为特定级别的运行启动服务的脚本的运行目录的系统。它调用mysqld_safe来启动MySQL服务器。

(4)mysqld_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务器。

(5)myisamchk:用来描述、检查、优化和维护MyISAM表的实用工具。

(6)mysql.server:服务器启动脚本。UNIX中的MySQL分发版包括mysql.server脚本。

(7)mysqlbug:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。

(8)mysql_install_db:该脚本用默认权限创建MySQL授权表,通常只在系统上首次安装MySQL时执行一次。