MySQL从入门到精通

978-7-115-41436-6
作者: 龙马高新教育 国家863中部软件孵化器
译者:
编辑: 张翼
分类: MySQL

图书目录:

详情

本书面向MySQL的零基础读者,介绍基础入门知识和实际操作技巧。全书紧贴软件开发的实际需求,首先向读者展示语言的背景知识和应用范围,之后通过实例和自测,系统讲解相关知识点,同时兼顾实际开发项目经验。为了增强实用性,光盘中还特别赠送了精选的考试认证、求职面试等题库,供读者研究学习。最后,为帮助初入职场的从业者顺利进入角色,还在光盘中赠送了职业规划建议及相关开发文档。

图书摘要

MySQL从入门到精通

龙马高新教育 策划

国家863中部软件孵化器 编著

人民邮电出版社

北京

图书在版编目(CIP)数据

MySQL从入门到精通/国家863中部软件孵化器编著.--北京:人民邮电出版社,2016.4

ISBN 978-7-115-41436-6

Ⅰ.①M… Ⅱ.①国… Ⅲ.①关系数据库系统 Ⅳ.①TP311.138

中国版本图书馆CIP数据核字(2016)第013946号

内容提要

本书以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了MySQL的相关知识和实战技能。

本书第1篇【基础知识】主要讲解MySQL的安装与配置、MySQL数据库的基础知识、MySQL管理工具的使用以及数据库的基本操作等;第2篇【核心技术】主要讲解数据表的基本操作、MySQL的数据类型和运算符、MySQL函数、查询语句、存储过程与函数、触发程序以及视图等;第3篇【高级应用】主要讲解 MySQL 的备份和恢复、MySQL 的复制、MySQL 的日志管理、MySQL 分布式应用、MySQL缓存的配置和使用以及MySQL错误代码和消息的使用等;第4篇【项目实战】通过试卷管理系统、电动汽车分时租用平台和电动汽车GPS定位系统三个实战案例,介绍了完整的MySQL数据系统开发流程。

本书所附DVD光盘中包含了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。

本书适合任何想学习MySQL的读者,无论您是否从事计算机相关行业,是否接触过MySQL,均可通过学习快速掌握MySQL的开发方法和技巧。

◆策划 龙马高新教育

编著 国家863中部软件孵化器

责任编辑 张翼

责任印制 杨林杰

◆人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京中新伟业印刷有限公司印刷

◆开本:787×1092 1/16

印张:30

字数:742千字  2016年4月第1版

印数:1-2500册  2016年4月北京第1次印刷

定价:69.80元(附光盘)

读者服务热线:(010)81055410 印装质量热线:(010)81055316

反盗版热线:(010)81055315

广告经营许可证:京东工商广字第8052号

国家863软件专业孵化器建设是“十五”初期由国家科技部推动、地方政府实施的一项重要的产业环境建设工作。在国家高技术研究发展计划(863计划)和地方政府支持下建立了服务软件产业发展的公共技术支撑平台体系,围绕“推广应用863技术成果,孵化人、项目和企业”的主题,以“孵小扶强”为目标,在全国不同区域开展了形式多样的软件孵化工作,取得了较大的影响力和服务成效。特别是在软件人才培养方面,国家863软件孵化器各基地都做了许多有益探索。其中设在郑州的国家863中部软件孵化器更是连续举办了四届青年软件设计大赛,引起了当地社会各界的广泛关注;同时,开展校企合作,以软件工程技术推广、软件国际化为背景,培养了一大批实用软件人才。

目前,我国大专院校每年都招收数以万计的计算机或者软件专业学生,这其中除了一部分毕业生继续深造攻读研究生学位,大多数都要直接走上工作岗位。许多学生在毕业后求职时,都面临着缺乏实际软件开发技能和经验的问题。解决这一问题,需要大专院校与企业界的密切合作;学校教学在注重基础的同时,应适当加强产业界当前主流技术的传授;产业界也可将人才培养、人才发现工作前置到学校教学活动中。国家863软件专业孵化器与大学、企业都有广泛合作,在开展校企合作、培养软件人才方面具有得天独厚的条件。当然,做好这项工作还有许多问题需要研究和探索,比如校企合作方式、培养模式、课程设计与教材体系等。

欣闻由国家863中部软件孵化器组织编写的“从入门到精通”丛书即将面市,内容除涵盖目前主流技术知识和开发工具之外,更融汇了其多年从事大学生软件职业技术教育的经验,可喜可贺。作为计算机软件研究和教学工作者,我衷心希望这套丛书的出版能够为广大青年学子提供切实有效的帮助,能够为我国软件人才培养做出新的贡献。

北京大学信息科学技术学院院长 梅宏

2010年3月12日

前言

“从入门到精通”系列图书是专门为编程初学者量身定做的一套编程学习用书,由龙马高新教育策划,国家863中部软件孵化器组织编写。

本书专门为MySQL初学者和爱好者打造,旨在帮助读者掌握MySQL相关知识并能够进行项目开发。当您认真系统地学习本书之后,就可以骄傲地宣布——“我是一位真正的MySQL程序员了!”。

为什么要写这样一本书

荀子曰:“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”

实践对于学习的重要性由此可见一斑。纵观当前编程图书市场,理论知识与实践经验脱节是一些MySQL图书的写照。为了改变这一现象,本书立足于实战,从项目开发的实际需求入手,将理论知识与实际应用相结合,目的就是让初学者能够快速成长为初级程序员,并拥有一定的项目开发经验,从而在职场中拥有一个高起点。

MySQL的最佳学习途径

本书总结了作者多年的教学实践经验,为读者设计了最佳的学习路线。

本书特色

▶零基础、入门级的讲解

无论读者是否从事计算机相关行业,是否接触过MySQL,是否使用MySQL开发过项目,都能从本书中找到最佳起点。

▶超多、实用、专业的范例和项目

本书结合实际工作中的范例逐一讲解MySQL的各种知识和技术,【项目实战】篇中更以3个项目的实现来总结本书所学知识,帮助读者掌握实战技能,轻松拥有项目经验。

▶随时检测自己的学习成果

每章首页中均提供了学习要点,以指导读者重点学习并对照检查。章后的高手点拨和实战练习,均根据本章内容精选而成,读者可以随时检测自己的学习成果,做到融会贯通。

▶细致入微、贴心提示

本书在讲解过程中使用了“提示”“注意”“技巧”等小栏目,帮助读者在学习过程中更清楚地理解基本概念、掌握相关操作,并轻松获取实战技巧。

超值光盘

▶15小时全程同步教学录像

录像涵盖本书所有知识点,详细讲解每个实例及项目的开发过程及关键点,帮助读者更轻松地掌握书中所有的MySQL程序设计知识。

▶超多容量王牌资源大放送

赠送大量王牌资源,包括MySQL参考手册、JSP连接MySQL数据库电子书、MySQL数据库远程连接开启方法电子书、MySQL安全配置电子书、MySQL常用维护管理工具电子书、MySQL数据备份电子书、MySQL常用命令电子书、MySQL数据库优化电子书、MySQL修改root密码方法电子书、PHP连接MySQL实例电子书、MySQL常见面试题及解析电子书、软件开发文档模板库、12小时网站建设教学录像、18小时Oracle项目实战教学录像等。

读者对象

▶没有任何数据库基础的初学者。

▶有一定的数据库基础,想精通MySQL的人员。

▶有一定的MySQL数据库基础,没有项目开发经验的人员。

▶大专院校及培训学校的老师和学生。

光盘使用说明

01 将光盘放入光驱中,几秒钟后系统会弹出【自动播放】对话框,如下图所示。

02 在Windows 7 操作系统中单击【打开文件夹以查看文件】链接以打开光盘文件夹,用鼠标右键单击光盘文件夹中的MyBook.exe 文件,并在弹出的快捷菜单中选择【以管理员身份运行】菜单项,打开【用户账户控制】对话框,如下图所示。单击【是】按钮,光盘即可自动播放。在Windows 8 操作系统中会在桌面右上角显示快捷操作界面,单击界面后,在其列表中选择【运行MyBook.exe】选项即可。

03 光盘运行后首先播放片头动画,之后进入光盘的主界面。其中包括【课堂再现】、【Oracle项目实战教学录像】和【网站建设教学录像】三个学习通道,以及【范例源码】、【实战练习答案】、【赠送资源】、【帮助文件】、【退出光盘】5个功能按钮。

04 单击【课堂再现】按钮,进入多媒体同步教学录像界面。在左侧的章号按钮上单击鼠标左键,在弹出的快捷菜单上单击要播放的节名,即可开始播放相应的教学录像。

05 单击【Oracle项目实战教学录像】和【网站建设教学录像】按钮,可打开对应的实战教学录像。

06 单击【范例源码】按钮,可打开本书范例源码文件夹。

07 单击【实战练习答案】按钮,可在打开的文件夹中看到实战练习答案的PDF文件,打开PDF文件即可查看本书实战练习部分的答案。

08 单击【赠送资源】按钮,可以查看随本书赠送的扩展学习资源。

09 单击【帮助文件】按钮,可以打开“光盘使用说明.pdf ”文档,该说明文档详细介绍了光盘在计算机上的运行环境及运行方法等。

10 单击【退出光盘】按钮,即可退出本光盘系统。

创作团队

本书由龙马高新教育策划,周喜平任主编,师晓利、邵彧和赵雪琴任副主编。郑州大学西亚斯国际学院王颖和河南省机关事务管理局詹保坡负责编写第0~3章、第18章,郑州大学西亚斯国际学院邵彧和张波、郑州升达经贸管理学院宁跃飞负责编写第4~7章,郑州大学西亚斯国际学院赵雪琴、宋小芹、周喜平负责编写第8~12、16、17、19、20章,郑州大学西亚斯国际学院师晓利负责编写第13~15章。参与本书编写、资料整理、多媒体开发及程序调试的人员有孔万里、周奎奎、张任、张田田、尚梦娟、李彩红、尹宗都、王果、陈小杰、左琨、邓艳丽、崔姝怡、侯蕾、左花苹、刘锦源、普宁、王常吉、师鸣若、钟宏伟、陈川、刘子威、徐永俊、朱涛和张允等。

在本书的编写过程中,我们竭尽所能地将最好的内容呈现给读者,但也难免有疏漏和不妥之处,敬请广大读者不吝指正。读者在学习过程中有任何疑问或建议,可发送电子邮件至zhangyi@ptpress.com.cn。

编者

第0章 MySQL学习指南

本章视频教学录像:23分钟

数据库(DataBase,DB)是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据。如今,已有Oracle、SQL Server和MySQL等诸多优秀的数据库。

本章要点(已掌握的在方框中打钩)

□MySQL的技术体系

□MySQL的特点

□SQL语言

0.1 什么是数据库

本节视频教学录像:8分钟

要想学好MySQL,就必须对数据库的概念和基础知识有所了解。MySQL是众多数据库的一种。

⒈ 什么是数据库

数据库(DataBase,DB)是按照数据结构来组织、存储和管理数据的仓库。随着信息技术和市场的发展,特别是20世纪90年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统,在各个方面都得到了广泛的应用。

数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统。也就是说,数据库包含有两种含义:保管数据的“仓库”,以及管理数据的方法和技术。

数据库的发展大致可以划分为以下几个阶段:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。根据数据结构的联系和组织,数据库大致可以分为3类:层次式数据库、网络式数据库和关系型数据库。

不管是哪种类型的数据库,都应该有以下共同的属性:采用特定的数据类型;增加数据共享、减少数据冗余;具有较高的数据独立性;具有统一的数据控制功能。

常见的数据库有甲骨文公司的Oracle、IBM公司的DB2、微软公司的Access与SQL Server以及本书正要详细介绍的MySQL。

⒉ 数据库系统

数据库系统包括3个主要的组成部分。

⑴ 数据库:用于存储数据的存储空间。

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

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

数据库(DataBase,DB)提供一个存储空间用于存储数据,就像一个仓库一样,可以存储很多种不同的文件。一个数据库系统可能包含有很多种数据库。

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

数据库应用程序(Database Application),相对于DBMS,数据库应用程序可以帮助用户实现对数据库操作的更高要求,可以让管理过程更加的直观和友好。

⒊ SQL语言

SQL的含义是结构化查询语言(Structured Query Language),它是用来实现对数据库进行查询和修改操作的标准语言。

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

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

⑵ 数据操作语言(DML):INSERT、UPDATE、DELETE语句。

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

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

在这里不对上面的语句一一说明,只是给读者一个直观的印象,在后面的章节,笔者将详细介绍这些知识。

⒋ 数据库访问技术

数据库存储的程序最终是要为软件服务的,因此,程序通过数据库访问技术访问调用数据库。不同的程序设计语言会采用不同的数据库访问技术。主要的数据库访问技术有ODBC、JDBC、ADO.NET、PDO等。

0.2 MySQL简介

本节视频教学录像:4分钟

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:MySQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。

MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。

MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

2008年1月16日MySQL AB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。

MySQL是数据库的一种,具有数据库的通用特征,同时,比起其他类型的数据库,它还具有自己鲜明的特点。

1. MySQL介绍

MySQL是一个小型的开源的关系型数据库管理系统,与其他大型数据库管理系统例如Oracle、DB2、SQL Server等相比,MySQL规模小,功能有限,但是它体积小、速度快、成本低,且它提供的功能对稍微复杂的应用已经够用,这些特性使得MySQL成为世界上最受欢迎的开放源代码数据库。

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。

由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。目前Internet上流行的网站构架方式是LAMP (Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。

2. MySQL版本介绍

针对不同的用户,MySQL分为两个不同的版本:

●MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。用户可以自由下载使用。

●MySQL Enterprise Server(企业版服务器):为企业提供数据库应用,支持ACID事务处理,提供完整的提交、回滚、崩溃恢复和行政锁定功能。需要付费使用,官方提供技术支持。

时至今日MySQL 和 php 的结合绝对是完美。很多大型的网站也用到MySQL数据库。MySQL的发展前景是非常光明的!

0.3 MySQL的技术体系

本节视频教学录像:3分钟

要学好MySQL,就必须先要对MySQL数据库的技术体系做一个系统的了解和认识,这对于学者以后进行数据库的开发和应用有重要的意义。

⒈ C/S架构

C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。通过C/S可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是C/S形式的两层结构。

在C/S模式中服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、MySQL 等。客户端需要安装专用的客户端软件。用户使用应用程序时,首先启动客户端通过有关命令告知服务器完成各种操作,而服务器则按照命令提供相应的服务。每一个客户端软件都可以向一个服务器或应用程序服务器发出请求。

⒉ MySQL命令行实用程序

MySQL数据库管理系统提供了许多命令行工具程序,这些工具用来管理MySQL服务器、对数据库进行访问控制、管理MySQL用户以及数据库备份和恢复工具等。这些工具程序分为MySQL服务器端工具程序和客户端工具程序。

⒊ MySQL Workbench

MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQLWorkbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL迁移。主要功能如下。

●数据库设计和模型建立。

●SQL 开发。

●数据库管理。

MySQL Workbench同时有开源和商业化两个版本。

⑴ MySQL Workbench Community Edition(社区版本),用户可免费使用。

⑵ MySQL Workbench Standard Edition(商业版本),需要收取费用,官方提供技术支持。

两个版本的软件均支持Windows和Linux系统。

0.4 MySQL的应用领域和前景

本节视频教学录像:3分钟

经过多年的发展,MySQL已经应用到各行各业,同时MySQL自身也得到了空前的发展,越来越多的数据库从业者选择使用并提高了MySQL。

MySQL数据库有很多优势,下面总结几点。

⑴ MySQL是开放源代码的数据库,任何人都可以获得该数据库的源代码。这就使得任何人都可以修正MySQL的缺陷。并且任何人都能以任何目的来使用该数据库。Richard Stallman提出GUN工程以及GPL许可协议,目的是为用户提供可以自由使用的软件。MySQL作为一款自由软件,延续并继承了GUN的思想,保证了MySQL是一款可以自由使用的数据库。

⑵ MySQL能够实现跨平台操作,不仅可以在Windows系列操作系统上运行,还可以在UNIX、Linux和Mac OS等操作系统上运行。因为很多网站都选择UNIX、Linux作为网站的服务器,所以MySQL的跨平台性保证其在Web应用方面的优势。虽然微软公司的SQL Server数据库是一款很优秀的商业数据库,但是其只能在Windows系列的操作系统上运行。因此MySQL数据库的跨平台性决定其应用前景广泛。

⑶ MySQL数据库是一款自由软件。任何人都可以从MySQL的官方网站下载该软件。有些社区版本的MySQL都是可以免费使用的。即使是需要付费的附加功能,其价格也是很便宜的。相对于Oracle、DB2和SQL Server这些价格昂贵的商业软件,MySQL具有绝对的价格优势。

⑷ MySQL功能强大且使用方便。MySQL是一个真正的多用户、多线程SQL数据库服务器。它是以客户机/服务器结构的实现,由一个服务器守护程序mysqld和很多不同的客户程序与库组成。它能快速、有效和安全地处理大量的数据。相对于Oracle等数据库来说,MySQL的使用是非常简单的。这也为MySQL在各行各业得到广泛的应用奠定了基础。

正是因为MySQL是一款开源的软件,使它才能够在各行各业迅速得到广泛的应用。随着越来越多的知名企业阿里巴巴、新浪等正在使用MySQL数据库系统,而这方面的人才需求也是供不应求,2014年,ORACLE官方也增设了MySQL OCP (认证专家)认证考试,通过考试后,将颁发Oracle官方证书:即Oracle Certified Professional(MySQL 5.6 Database Administrator)。熟练掌握MySQL以后,可以从事系统架构师、系统维护、数据开发等职业。

0.5 MySQL学习经验谈

本节视频教学录像:3分钟

数据库的适用范围越来越大,它已经成为软件系统的一个重要组成部分,因此,学好数据库将是软件开发的一个必要条件。如何快速有效地掌握并能熟练应MySQL 呢?笔者认为没有捷径可走,但多写多练多商机实践,对于初学者十分有效。

学习好数据库,快速掌握并熟练应用MySQL,最主要的就是多写多实践。笔者将自己学习MySQL的方法总结如下。

⑴ 多上机实践。要想熟练地掌握数据库,就必须经常上机练习。只有在上机实践中才能深刻体会数据库的使用。通常情况下,数据库管理员工作的时间越长,其工作经验就越丰富。很多复杂的问题,都可以根据数据库管理员的经验来很好的解决。上机实践的过程中,可以将学到的数据库理论知识理解得更加透彻。本书后面的章节有很多上机实践的小节,希望通过这些实践能够让读者对每个章节都能理解透彻。

⑵ 多编写MySQL语句。SQL语句是数据库的灵魂。数据库中的很多操作都是通过SQL语句来实现的。虽然现在数据库都有很易用的图形界面,可以直接在图形界面上创建数据库和表。但是,图形界面却掩盖了这些操作是如何实现的。只有经常使用SQL语句来操作数据库中的数据,读者才可以更加深刻地理解数据库。本书后面的章节也为读者准备了很多SQL语言编程的例子。希望读者能够通过编写SQL语句能够更好地学习数据库。

⑶ 通过编程语言来操作MySQL。目前,数据库系统已经成为了软件系统的一个必要组成部分。软件开发者学习数据库的最终目的就是在软件开发中使用数据库。因此,在学习过程中,多思考一下如何使用程序语言来操作MySQL。最好多编一些程序来操作MySQL,这样,既可以加深对数据库的理解,也可以提高自己的编程能力。

⑷ 不断加强MySQL理论知识的学习。数据库理论是学好MySQL的基础。虽然理论知识会有点枯燥,但是这是学好数据库的前提。如果没有理论基础,学习的东西就不扎实。例如,数据库理论中会讲解E-R图、数据库设计原则等知识。如果不了解这些知识,就很难设计出一个很好的数据库及表。读者可以将数据库理论知识与上机实践结合到一起来学习,这样学习效率会很高。

0.6 MySQL学习路线图

本节视频教学录像:2分钟

学习是一个由浅入深的过程。学习MySQL也是如此,笔者编制了一个系统的学习路线图,在以后的章节中,将带领大家按照学习论线图,一点一点引领大家认识MySQL、熟悉MySQL直至掌握MySQL。

学习MySQL主要分为4个阶段。

⒈ MySQL基础知识的学习。主要包括MySQL安装与配置、MySQL数据库基础、MySQL管理工具的使用、数据库的基本操作等。

⒉ MySQL核心技术的学习。主要包括数据表的基本操作、MySQL数据类型和运算符、MySQL函数、关于查询语句的详细讲解、存储程序与自定义函数、触发程序、视图等。

⒊ MySQL的高级应用。主要包括MySQL的备份和恢复、MySQL的复制、MySQL日志管理、MySQL分布式应用、MySQL缓存的配置和使用、MySQL错误代码和消息的使用。

⒋ MySQL的项目实战。在此列举了3个比较典型的实战项目,来检验上面3个阶段的学习情况,以及各种综合应用。

第1篇 基础知识

万丈高楼平地起,打好基础不费力!

本篇是学习MySQL的基础。通过本篇的学习,您将学会MySQL的基本操作、MySQL的数据库基础,掌握MySQL管理工具的使用,包括MySQL Administrator、phpMyAdmin、Navicat for MySQL、MySQL访问权限系统、MySQL用户账户管理以及MySQL中密码安全和连接安全

第1章 安装与配置——初识MySQL

第2章 MySQL数据库基础

第3章 MySQL管理工具的使用

第4章 数据库的基本操作

第1章 安装与配置——初识MySQL

本章视频教学录像:37分钟

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16日被Sun公司收购。而2009年,Sun又被Oracle收购。由于其占用空间小、速度快、总体拥有成本低,尤其是开放源码这一特点,目前MySQL被广泛地应用在Internet上的中小型网站中。MySQL的官方网站的网址是:www.mysql.com。通过本章的学习,读者能够掌握MySQL的安装过程,以及了解如何配置MySQL。

本章要点(已掌握的在方框中打钩)

□MySQL的特性

□MySQL在不同环境下的安装步骤

1.1 MySQL的特性

本节视频教学录像:4分钟

MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司。在Web应用方面,MySQL是最好的关系数据库管理系统(Relational Database Management System,RDBMS)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,由于其占用空间小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。总的来说,它主要有以下特性。

⑴使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

⑵支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。

⑶为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和Tcl等。

⑷支持多线程,充分利用CPU资源。

⑸优化的SQL查询算法,可有效地提高查询速度。

⑹既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库嵌入到其他的软件中。

⑺提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。

⑻提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

⑼提供用于管理、检查、优化数据库操作的管理工具。

⑽支持大型的数据库,可以处理拥有上千万条记录的大型数据库。

⑾支持多种存储引擎。

⑿MySQL是开源的,所以用户不需要支付额外的费用。

⒀MySQL使用标准的SQL数据语言形式。

⒁MySQL对PHP有很好的支持,PHP是目前最流行的Web开发语言之一。

⒂MySQL是可以定制的,采用了GPL协议,用户可以修改源码来开发自己的MySQL系统。

⒃在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性。

⒄复制全局事务标识,可支持自我修复式集群。

⒅复制无崩溃从机,可提高可用性。

⒆复制多线程从机,可提高性能。

目前针对不同用户,MySQL提供了2个不同的版本。

⑴MySQL Community Server:社区版,该版本完全免费,但是官方不提供技术支持。

⑵MySQL Enterprise Server:企业版,它能够为企业提供高性价比的数据仓库应用,支持ACID事务处理,提供完整的提交、回滚、崩溃恢复和行级锁定功能。但是该版本需付费使用,官方提供电话及文档等技术支持。

1.2 安装MySQL

本节视频教学录像:14分钟

MySQL是全世界最流行的开源数据库软件之一,因其代码自由、最终用户可免费使用,首先在互联网行业得到应用。在过去十几年间,MySQL在全球普及,但若想使用MySQL作为数据库开发一款优秀的软件,首先要知道如何安装MySQL,本节将主要介绍MySQL在Windows 7和Linux环境下的安装。

1.2.1 开源软件的特点

开源(Open-Source),即开放源码,它被定义为源码可以被公众使用的软件,并且此软件的使用、修改和分发也不受许可证的限制。开源软件具有以下特点。

1.降低风险

拥有源代码使客户可以控制那些他们的业务所赖以生存的工具。当一个开源产品的开发者提高价格,增加了客户难以接收的限制,或者使用了一些使客户不满意的方法,另一个不同的组织将使用该源代码开发新的产品以解决原来机构的问题。客户也能自己维护或找别人改进它以达到自己的要求。客户控制软件,这在传统私有软件模式下是闻所未闻的事情。

2.质量更有保障

一些研究显示开源软件与别的可用商业软件相比,在可靠性上具有极大的优势。更加有效的开发模式、更多的独立同行对代码和设计的双重审查以及大部分作者对自己作品的极大荣誉感,都对其优良的质量有所贡献,一些公司甚至给予发现Bug者以物质奖励。

3.透明

私有软件有很多“阴暗的死角”,隐藏着许多Bug。源码对于查错和理解产品工作原理是很重要的。在大的软件公司,只有极少数人能接触到源码,而这些能接触源码的人通常用户都无法直接接触。而能接触源码对于修补安全漏洞也是非常重要的。

4.剪裁

开放源码给用户极大自由,使他们能够按照自己的业务需求定制软件。大型组织能从即使很小的定制行为中削减大量开支和人力成本。用户的挑错和改进反过来对可以促进产生更加标准的开放源码软件包。这在传统的私有软件开发中是不可能得到的。

5.有利的版权许可和价格

定义为开放源码使软件在版权许可方面比私有软件具有更大的灵活性。这可以大大削减安装所需的花费和时间,对那些采购过程费时费力的机构更加有利。它也能在安装软件时为用户带来更大的自由度。

1.2.2 在Windows系统环境下的安装

1.下载

首先从MySQL官网(http://www.mysql.com/downloads/mysql/)下载安装程序,本例中使用的是64位Windows版本(mysql-installer-community-V5.6.21.1.msi)。消费者根据实际情况下载合适的版本。

2.安装

⑴双击运行“mysql-installer-community-V5.6.21.1.msi”,MySQL安装向导启动。

⑵接受许可,并单击“Next”,进入安装类型选择页面。

⑶选择安装类型,安装类型共有5种,各项含义为:“Developer Default”是默认安装类型;“Server only”是仅作为服务器;“Client only”是仅作为客户端;“Full”是完全安装;“Custom”是自定义安装类型。我们选择“Custom”。

⑷选择安装组件,选中左侧列表显示的是可用的全部组件,右侧列表显示的是被选中将要安装的组件,可以通过向左或向右的箭头添加或删除需要安装的组件。作为初学者可能并不知道将来会用到哪些组件,可以按下图所示,选择安装所有组件。

⑸安装条件检查,选择好自己需要的组件,单击“Next”进入安装条件检查页面。根据选择的安装类型,会需要安装一些框架(Framework)。

选择需要安装的框架,单击“Execute”进入到框架安装页面,如下图所示。

⑹框架安装完成后,单击“Next”进入安装页面。

⑺开始安装,单击“Execute”,安装完成如下图所示。

⑻确认配置信息,单击“Next”。

⑼进行服务器配置型选择。“Developer Machine” 选项代表典型个人桌面工作站,在3种类型中,占用最少的内存;“Server Machine”选项代表服务器,MySQL服务器可以同其他应用程序一起运行,例如FTP、E-mail和Web服务器,将MySQL服务器配置成使用适当比例的系统资源,占用内存在3种类型中居中;“ Dedicated MySQL Server Machine” 选项代表只运行MySQL服务的服务器,假定没有运行其他应用程序,将MySQL服务器配置成占用机器全部有效的内存。作为初学者,选择“Developer Machine”(开发者机器)已经足够了,这样占用系统的资源不会很多,默认端口3306也可不做修改,若需修改可以直接在此处修改,但要保证修改的端口号没有被占用,设置完成后,单击“Next”。

⑽设置管理员密码。如下图所示,选择“Add User”,同时可以创建用户,这里出于对安全性考虑,不添加新用户。

⑾设置系统服务器名称。可以根据自己的需要进行名称设置,这里选择使用默认名称。另外,可以选择是否在系统启动的同时自动启动MySQL数据库服务器,这里按默认设置,单击“Next”。

⑿申请服务器配置,执行对服务器配置信息的更改,单击“Execute”。

完成之后界面如下图所示。

⒀安装完成,勾选中“Start MySQL Workbench after Setup”,可对是否成功安装进行测试,单击“Finish”。

1.2.3 在Linux系统环境下的安装

1.下载MySQL-5.6.23-1.el7.x86_64.rpm-bundle.tar

下载页面地址:http://dev.mysql.com/downloads/mysql/,此处选择“Red Hat Enterprise Linux 7 / Oracle Linux 6 (x86, 32-bit), RPM Bundle”下载,下载至/root/mysql/目录下,下载文件名为“MySQL-5.6.23-1.el7.x86_64.rpm-bundle.tar”。

2.解压tar包

    cd /mysql/Downloads/
    tar -xvf MySQL-5.6.23-1.el7.x86_64.rpm-bundle.tar

3.以RPM方式安装MySQL

在RHEL系统中,必须先安装“MySQL-shared-compat-5.6.23-1.el7.x86_64.rpm”兼容包,然后才能安装Server和Client,否则安装时会出错。

    yum install MySQL-shared-compat-5.6.23-1.el7.x86_64.rpm   #RHEL兼容包
    yum install MySQL-server-5.6.23-1.el7.x86_64.rpm       #MySQL服务端程序
    yum install MySQL-client-5.6.23-1.el7.x86_64.rpm       #MySQL客户端程序
    yum install MySQL-devel-5.6.23-1.el7.x86_64.rpm        #MySQL的库和头文件
    yum install MySQL-shared-5.6.23-1.el7.x86_64.rpm       #MySQL的共享库

4.配置MySQL登录密码

    cat/root/.mysql_secret #获取MySQL安装时生成的随机密码
    service mysql start   #启动MySQL服务
    mysql-uroot-p     #进入MySQL,使用之前获取的随机密码
    SET PASSWORD FOR'root'@'localhost'=PASSWORD('123456'); #在MySQL命令行中设置root账户的密码为123456
    quit         #退出MySQL命令行
    service mysql restart  #重新启动MySQL服务

1.3 可视化管理工具的选择和安装

本节视频教学录像:7分钟

本节主要介绍几种常用的可视化管理工具的特点,以及部分可视化管理工具的下载和安装。

1.3.1 选择和下载可视化管理工具

目前,有很多优秀的MySQL可视化管理工具,比如MySQL Workbench、phpMyAdmin、Aqua Data Studio、SQLyog、MySQL-Front、mytop、Sequel Pro、SQL Buddy、MySQL Sidu、Navicat for MySQL等,开发者可以根据需求进行选择。下面对其中常用的5种可视化管理工具做简单介绍。

1.MySQL Workbench

MySQL Workbench是一个由MySQL开发的跨平台、可视化数据库工具。它作为DBDesigner4工程的替代应用程序而备受瞩目。MySQL Workbench可以作为Windows、Linux和OS X系统上的原始GUI工具,它有各种不同的版本。

2.Aqua Data Studio

对于数据库管理人员、软件开发人员以及业务分析师来说,Aqua Data Studio是一个完整的集成开发环境(Intergrated Development Environment,IDE)。它主要具备了以下4个方面的功能:

⑴数据库查询和管理工具;

⑵一套数据库、源代码管理以及文件系统的比较工具;

⑶为Subversion(SVN)和CVS设计了一个完整的集成源代码管理客户端;

⑷提供了一个数据库建模工具(Modeler),它和最好的独立数据库图表工具一样强大。

3.SQLyog

SQLyog是一个全面的MySQL数据库管理工具。它的社区版(Community Edition)是具有GPL许可的免费开源软件。这款工具包含了开发人员在使用MySQL时所需的绝大部分功能:查询结果集合、查询分析器、服务器消息、表格数据、表格信息,以及查询历史,它们都以标签的形式显示在界面上,开发人员只要单击鼠标即可。此外,它还可以方便地创建视图和存储过程。

4.MySQL-Front

这个MySQL数据库的图形GUI是一个“真正的”应用程序,它提供的用户界面比用PHP和HTML建立起来的系统更加精确。因为不会因为重载HTML网页而导致延时,所以它的响应是即时的。如果供应商允许的话,可以让MySQL-Front直接与数据库进行工作。如果不行,也只需要在发布网站上安装一个小的脚本即可。

5.Sequel Pro

Sequel Pro是一款管理Mac OS X数据库的应用程序,它可以让用户直接访问本地以及远程服务器上的MySQL数据库,并且支持从流行的文件格式中导入和导出数据,其中包括SQL、CSV 和XML等文件。

注意

php MyAdmin和Navicat for MySQL的特性及在Windows 7下的基本操作详见第3章。

其中,MySQL Workbench的安装及配置在第1.2节介绍MySQL安装时已经包括,且由于工具较多无法一一介绍其安装和配置,所以本节主要选择了Navicat for MySQL,介绍其在Linux和Windows 7系统环境下的安装。

1.3.2 在Linux系统环境下的安装

本节选用的Navicat for MySQL版本为navicat111_mysql_cs.tar.gz,官方下载地址:http://www.navicat.com.cn/download/navicat-for-mysql。使用方法如下。

⑴打开终端。

选择应用程序→系统工具(或附件)→终端,切换到root账户:#su,密码:xx。

注意

输入root密码时,密码不会显示出来,也没有提示的特殊字符,输完密码后按Enter键就可以了。

⑵切换到存放 navicat_for_mysql_10.0.11_cn_linux.tar.gz 软件包的目录,例如/home/zdw/software 目录下。

# cd /home/zdw/software

⑶解压 navicat_for_mysql_10.0.11_cn_linux.tar.gz。

# tar -zxvf navicat_for_mysql_10.0.11_cn_linux.tar.gz

解压后会得到名为 navicat_for_mysql 的文件夹。

⑷将解压生成文件夹移动到/opt目录下。

# mv /home/zdw/software/navicat_for_mysql /opt

⑸运行 Navicat 的方法。

①进入安装目录:# cd /opt/navicat_for_mysql。

②执行命令:# ./start_navicat,这样即可启动Navicat。

为了方便,也可以创建Navicat的桌面启动器,方法如下:在桌面右键单击→单击“创建启动器”项→在“类型”栏选择“应用程序”;“名称”栏填入“Navicat”;“命令”栏单击右边的“浏览”选择到→“文件系统”→“opt”→“navicat_for_mysql”→“start_navicat”;

最后单击“确定”,就在桌面创建好Navicat的启动器。

1.3.3 在Windows系统环境下的安装

本节选用的Navicat for MySQL版本为navicat111_mysql_cs_x64.exe,官方下载地址:http://www.navicat.com.cn/download/navicat-for-mysql。Windows 7环境下安装比较简单,过程如下。

⑴双击安装程序,单击“下一步”。

许可协议选择“我同意”,单击“下一步”。

⑵如果不想把软件安装在系统盘下,在此可以修改安装目录。

⑶选择是否创建桌面快捷方式。

⑷进入安装页面,单击“安装”。

⑸安装完成,单击“完成”。

⑹打开Navicat for MySQL,使用root连接到本机的MySQL即可执行相关数据库的操作,界面如下所示。

1.4 测试安装环境

本节视频教学录像:3分钟

到此MySQL的安装配置已经完成,可以简单地对安装结果做一下测试,如在Windows 7环境下,在“开始”菜单下找到“MySQL“,单击“MySQL Workbench 6.2 CE”打开如下界面。

在界面中单击“root”,弹出登录提示框,如下图所示。

输入安装时设置的密码,即可进入主界面,在此界面可以做关于数据库的相关操作。

下面以导入数据库文件、查询表内容为例,做简单测试。

1.导入数据库

单击“MANAGEMENT”下的“Data Import/Restore”,系统弹出登录验证界面,输入登录密码,进入到导入界面,如下图所示。

在“Options”中选择“Import from Self-Contained File”,找到数据库文件XSCJ.sql,单击“Start Import”,导入成功显示如下。

另外,在左侧列表“SCHEMAS”中执行刷新,会看到导入的数据库。

2.查询

在Query 1窗口中输入相关SQL语句,执行查询,如输入如下语句。

use xscj;

select * from xs;

将查询出XSCJ数据库下xs表中的所有信息,如下图所示。

通过上述的简单操作,证明所安装的MySQL能够正常使用,接下来就可以结合其他开发环境进行项目的开发。

1.5 卸载MySQL

本节视频教学录像:2分钟

卸载MySQL需要保证能完全卸载,这样才不影响下次安装使用,下面以Windows 7为例介绍具体的卸载过程。

⑴在Windows服务中停止MySQL的服务。

⑵打开“控制面板”,单击“程序和功能”,找到“MySQL”,右键单击从下拉菜单中选择卸载(或者使用其他软件卸载)。

⑶卸载完成后,删除安装目录下的MySQL文件夹及程序数据文件夹,如C:\Program Files (x86)\MySQL 和 C:\ProgramData\MySQL。

⑷在运行中输入“regedit”,进入注册表,将所有的MySQL注册表内容完全清除,具体删除内容如下:

①HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除;

②HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除;

③HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL目录删除。

⑸操作完成重新启动计算机。

注意

在删除C:\ProgramData文件下的MySQL文件时,需要在“工具→文件夹选项→查看”中选中“显示隐藏的文件、文件夹和驱动器”选项。

1.6 高手点拨

本节视频教学录像:7分钟

1.安装过程中注意事项

⑴如果是用 MySQL + Apache,使用的又是 FreeBSD 网络操作系统的话,安装的时候应注意FreeBSD的版本问题。对FreeBSD 3.0以下版本来说,MySQL Source 内含的MIT-pthread运行是正常的,但3.0以上版本,必须使用Native Threads,也就是加入一个with-named-thread-libs=-lc_r的选项。

⑵如果在COMPILE过程中出了问题,请先检查你的gcc版本是否在2.81版本以上,gmake版本是否在3.75以上。

⑶如果内存不足,请使用./configure--with-low-memory来加入。

⑷如果要重新做configure,那么可以键入“rm config.cache”和“make clean”来清除记录。

⑸把MySQL安装在/usr/local目录下,这是缺省值,也可以按照需要设定所要安装的目录。

2.安装过程中常见的问题解析

⑴重新安装后提示“1045 access denied for user 'root'@'localhost' using password yes”。

解决方法:首先,删除MySQL程序,利用“sc delete mysql”删除原来的服务。然后从Windows的命令行(“DOS”下),切换到MySQL bin目录下,比如目录为 C:\Program Files\MySQL\MySQL Server 5.6\bin,输入如下命令。

mysqld --defaults-file=”C:\ProgramFiles\MySQL\MySQL Server 5.6\my-default.ini” --console--skip-grant-tables

注意

找到你自己机器上my- default.ini的位置。

接下来输入命令:“mysql -uroot mysql”。最后输入命令:“mysqladmin shutdown”,之后正常重启MySQL服务即可。⑵重新安装MySQL卡在最后一步过不去。

问题描述:第一次安装完MySQL,使用JDBC写入的中文都是乱码,但已存在于数据库中的中文数据正常,改了字符编码还是没能解决问题,于是决定重装。但重装卡在最后一步始终过不去。

解决方案:

①在注册表里搜索“MySQL”,删除相关记录;

②删除MySQL安装目录下MySQL文件;

③删除C:/ProgramData 目录下MySQL文件夹,然后再重新安装,安装成功。

⑶mysql -uroot -p登录不上。

问题描述:可以十分确定密码是正确的,但就是连不上,然后关闭MySQL服务,使用“mysqld--skip-grant-tables”启动,可以正常连接。重新安装了很多次,都是一样的。之前安装都是在安装过程中设置了root密码。

注意

为了支持中文,安装中字符编码选择UTF- 8。

解决方案:不要设置root密码,可以正常登录后,再使用命令修改root密码,再次连接。

⑷正常安装后,查询出中文数据是乱码。

问题描述:安装好数据库后,导入数据,由于之前数据采用GBK编码,而安装MySQL过程中使用UTF-8编码,所以查询出来数据是乱码。

解决方法:登录MySQL,使用set names gbk命令后,再次查询,中文显示正常。

⑸-bash: mysql: command not found。

用“mysql”命令进行登录MySQL报错,原因是没有设置环境变量,需要设置,或者进入到bin目录进行登录cd /usr/local/mysql/bin。

mysql -u root

⑹ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server。

用MySQL远程工具链接数据库报错,这个错误原因是没有开放远程链接功能,可以在MySQL里面输入如下命令进行解决。

GRANT ALL PRIVILEGES ON *.* TO ’root‘@’%' IDENTIFIED BY ’password’ WITH GRANT OPTION

1.7 实战练习

1.请简述MySQL的优缺点。

2.请问你在安装MySQL过程中遇到哪些问题,如何解决的?

第2章 MySQL数据库基础

本章视频教学录像:29分钟

通过第1章的学习,我们掌握了MySQL的安装和基本调试。本章将对MySQL进行更深层次的理论体系剖析,让读者通过图形界面和理论体系的结合,更好地了解以及掌握MySQL。本章主要讲解关系型数据库,MySQL的体系结构等。

本章要点(已掌握的在方框中打钩)

□关系型数据模型

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

□MySQL数据库系统的体系结构

□MySQL存储引擎

2.1 数据与数据管理的历史

本节视频教学录像:14分钟

本节将介绍在本书中出现的专有名词,让读者对数据、数据库、数据库系统以及数据库管理系统有一个准确的认知。

2.1.1 数据、数据库、数据库系统和数据库管理系统

说到数据,在大多数人的头脑中的第一反应就是数字。其实数字只是一种最简单的数据,是数据的一种传统和狭义的理解。从广义上的理解,数据的种类很多,文字、图形、图像、声音、学生的档案记录等,这些都是数据。

为了了解世界,交流信息,人们需要描述事物。在计算机中,为了存储和处理这些事物,就要抽出对这些事物感兴趣的特征并组成一个记录来描述。例如:在学生的档案中,如果人们最感兴趣的是学生的姓名、性别、年龄、出生年月、籍贯、所在系、入学时间,就可以这样描述:(王兵,男,1987,北京,计算机系,2006)。这里的学生记录就是数据。

在本书中提到的数据(Data)是数据库中存储的基本对象,它是数据库存储的最基本的元素。

有了数据之后,就需要把数据存储起来,方便查询使用等,把这种存储数据的“仓库”称之为数据库(Database,DB)。

举个例子来说明什么是数据库:每个人都有很多亲戚和朋友,为了保持与他们的联系,我们常常用一个笔记本将他们的姓名、地址、电话等信息都记录下来,这样要査谁的电话或地址就很方便了。这个“通讯录”就是一个最简单的“数据库”,每个人的姓名、地址、电话等信息就是这个数据库中的“数据”。我们可以在笔记本这个“数据庠”中添加新朋友的个人信息,也可以为电话变动的某个朋友修改他的电话号码“数据”。不过说到底,我们使用笔记本这个“数据库”还是为了能随时査到某位亲戚或朋友的地址、邮编或电话号码等“数据”。

数据库管理系统(Database Management System,DBMS)是用于创建、管理和维护数据库时所使用的软件,介于用户和操作系统之间,可对数据库进行管理。

数据库系统包括3个主要的组成部分。

⑴数据库:用于存储数据的存储空间。

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

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

2.1.2 数据管理的历史

1.简单应用 (20世纪50年代以前)

这个阶段最基本的特征是无数据管理及完全分散的手工方式,主要表现在以下几方面。

⑴无外存或只有磁带外存,输入输出设备简单。

⑵无操作系统,无文件管理系统,无管理数据的软件。

⑶数据是程序的组成部分,数据不独立,修改数据必须修改程序。处理时,数据随程序一道送入内存,用完后全部撤出计算机,不能保留。数据大量重复,不能共享。

⑷文件系统尚未出现,程序员必须自行设计数据的组织方式。

2.文件系统 (20世纪50年代后期到60年代中期)

这个阶段的基本特征是有了面向应用的数据管理功能,工作方式是分散的非手工的,主要表现在以下方面。

⑴外存有了很大的发展,除磁带机外,还出现了大容量的硬盘和灵活的软磁盘。输入、输出能力大大加强。

⑵系统软件方面,出现了操作系统、文件管理系统和多用户的分时系统;出现了专用于商业事务管理的高级语言COBOL,它主要用于文件处理,也可以进行非数值处理。

⑶数据管理方面,实现了数据对程序的一定的独立性,数据不再是程序的组成部分,修改数据不必修改程序,数据有结构,被组织到文件内,存储在磁带、磁盘上,可以反复使用和保存。文件逻辑结构向存储结构的转换由软件系统自动完成,减轻了系统开发和维护工作。

⑷文件类型已经多样化。由于有了直接存取设备,就有了索引文件、链接文件、直接存取文件等,而且能对排序文件进行多码检索。

⑸数据存取以记录为单位。

这一阶段数据管理的不足之处表现在以下方面。

⑴数据冗余度大。文件系统中文件基本上对应于某个应用程序,数据仍是面向应用的,不同应用程序所需数据有相同部分时,仍需建立各自的数据文件,不能共享,数据维护困难,一致性难以保证。

⑵数据与程序独立性仍不高。文件是为某一特定应用服务的,系统不易扩充。一旦数据逻辑结构改变,就必须修改文件结构的定义及应用程序;应用程序的变化也将影响文件的结构。因而文件仍不能反映现实世界事物之间的联系。

3.数据库系统 (20世纪60年代后期开始)

20世纪60年代后期,计算机在管理中的应用更加广泛,数据量急剧增大,对数据共享的要求越来越迫切;同时,大容量磁盘已经出现,联机实时处理业务增多;软件费用占系统总费用的比例日益上升,硬件价格大幅下降,编制和维护应用软件所需成本相对增加。在这种情况下,为了解决多用户、多应用共享数据的需求,使数据为尽可能多地为应用程序服务,出现了数据库系统,其特点主要如下。

⑴面向全组织的复杂数据结构。数据库中的数据结构不仅描述了数据自身,而且描述了整个组织数据之间的联系,实现了整个组织数据的结构化。

⑵数据冗余度小,易于扩充。由于数据库从组织的整体来看待数据,数据不再是面向某一特定的应用,而是面向整个系统,减少了数据冗余和数据之间不一致现象。在数据库系统下,可以根据不同的应用需求选择相应的数据加以使用,使系统易于扩充。

⑶数据与程序独立。数据库系统提供了数据的存储结构与逻辑结构之间的映射功能及总体逻辑结构与局部逻辑结构之间的映射功能。当数据的存储结构改变时,逻辑结构保持不变,或者当总体逻辑结构改变时,局部逻辑结构可以保持不变,从而实现了数据的物理独立性和逻辑独立性,把数据的定义和描述与应用程序完全分离开。

⑷统一的数据控制功能。数据库系统提供了数据的安全性控制 (Security)和完整性控制 (Integrity),允许多个用户同时使用数据库资源。

数据库的上述特点使信息系统的研制,从围绕加工数据的以程序为中心转移到围绕共享的数据库来进行,实现了数据的集中管理,提高了数据的利用率和一致性,从而能更好地为决策服务。因此,数据库技术在信息系统应用中正起着越来越重要的作用。

2.1.3 MySQL的起源与版本

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。

MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。但在经过一些测试后,开发者得出结论:mSQL并没有他们想象得那么快和灵活,他们设计了一个用于数据库的新的SQL接口,这个API的使用几乎和mSQL一样可使为用于mSQL而写的第三方代码更容易地移植到MySQL。

MySQL这个名字是怎么来的已经不清楚了。在MySQL诞生前,基本指南和大量的库和工具带有前缀“my”已经有10多年了,而且MySQL AB创始人之一的Monty Widenius的女儿也叫My,这两者到底哪一个是MySQL这个名字的由来已无从得知。

MySQL的海豚标志的名字叫“Sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

MySQL 的官网下载地址:http://www.mysql.com/downloads/在这个下载界面会有几个版本的选择。

⑴MySQL Community Server,社区版本,开源免费,但不提供官方技术支持。

⑵MySQL Enterprise Edition,企业版本,需付费,可以试用30天。

⑶MySQL Cluster,集群版,开源免费,可将几个MySQL Server封装成一个Server。

⑷MySQL Cluster CGE,高级集群版,需付费。

⑸MySQL Workbench(GUI TOOL),一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。

MySQL Community Server 是开源免费的,这也是我们通常用的MySQL的版本。本书后续采用的版本是MySQL Community Server v5.6.21。

2.1.4 MySQL与Oracle

数据库软件有很多种,常见的数据库有甲骨文公司(Oracle 公司)的Oracle、IBM公司的DB2、微软公司的Access与SQL Server以及本书要详细介绍的MySQL。

MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。

MySQL是一个快速、多线程、多用户、健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(Mass- Deployed)的软件中去。

与其他数据库管理系统相比,MySQL具有以下优势。

(1) MySQL是一个关系数据库管理系统。

(2) MySQL是开源的。

(3) MySQL服务器是一个快速、可靠和易于使用的数据库服务器。

(4) MySQL服务器工作在客户/服务器或嵌入系统中。

(5) 有大量的MySQL软件可以使用。

Oracle公司(甲骨文公司)是规模较大的企业软件公司,向遍及145个国家的用户提供数据库、工具和应用软件以及相关的咨询、培训和支持服务。在2008年,Oracle公司是继Microsoft及IBM后,全球收入排名第三的软件公司。但在2013年年底,Oracle公司击败 IBM,成为全球收入排名第二的软件公司。

Oracle数据库产品具有以下优良特性。

Oracle数据库之所以取得如此的成就,与它具有的很多优点是分不开的。

(1)兼容性。

Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与IBM SQL/DS、DB2、INGRES、IDMS/R等兼容。

(2)可移植性。

Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、Windows等多种操作系统下工作。

(3)可连接性。

Oracle能与多种通信网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。

(4)高生产率。

Oracle产品提供了多种开发工具,能极大地方便用户进行进一步的开发。

(5)开放性。

Oracle良好的兼容性、可移植性、可连接性和高生产率使Oracle RDBMS具有良好的开放性。

2.2 关系型数据模型

本节视频教学录像:5分钟

在本节中,主要介绍关系型数据模型,以及MySQL体系结构,让读者对MySQL有个整体上的认识。

2.2.1 关系型数据模型的结构

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

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

另一种数据模型是直接面向数据库的逻辑结构,它是对现实世界的第二层抽象。这种模型直接与数据库管理系统有关,称为“逻辑数据模型”,包括层次模型、网状模型、关系模型和面向对象模型。逻辑数据模型应该包含数据结构、数据操作和数据完整性约束3个部分,通常有一组严格定义的无二义性语法和语义的数据库语言,人们可以用这种语言来定义、操作数据库中的数据。在逻辑数据模型的4种模型中,层次模型和网状模型已经很少应用,而面向对象模型比较复杂,尚未达到关系模型数据库的普及程度。目前理论成熟、使用普及的模型就是关系模型。

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

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

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

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

关系模型建立在严格的数学概念的基础上,它用二维表来描述实体与实体间的联系。下面以学生信息表(如下表所示)为例,介绍关系模型中的一些术语。

⑴关系(Relation):对应通常所说的一张表。

⑵元组(Tuple):表中的一行即为一个元组,可以用来标识实体集中的一个实体,表中任意两行(元组)不能相同;

⑶属性(Attribute):表中的一列即为一个属性,给每个属性起一个名称即属性名,表中的属性名不能相同。

⑷主键(Key):表中的某个属性组,它可以唯一确定一个元组。

⑸域(Domain):列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。

⑹分量:元组中的一个属性值。

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

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

学生(学号,姓名,年龄,性别,系别)

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

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

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

尽管关系与传统的二维表格数据文件具有类似之处,但是它们又有区别,严格地说,关系是一种规范化的二维表格,具有如下性质。

⑴属性值具有原子性,不可分解。

⑵没有重复的元组。

⑶理论上没有行序,但是使用时有时可以有行序。在关系数据库中,关键码(简称键)是关系模型的一个重要概念,是用来标识行(元组)的一个或几个列(属性)。如果键是唯一的属性,则称为唯一键;反之由多个属性组成,则称为复合键。

键的主要类型如下。

⑴超键:在一个关系中,能唯一标识元组的属性或属性集称为关系的超键。

⑵候选键:如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。

⑶主键:如果一个关系中有多个候选键,则选择其中的一个键为关系的主键。用主键可以实现关系定义中“表中任意两行(元组)不能相同”的约束。

例如,在一个数据库图书管理系统中,可将图书明细表中的图书编号列假设是唯一的,因为图书馆管理员是通过该编号对图书进行操作的。因此,把图书编号作为主键是最佳的选择,而如果使用图书名称列作为主键则会存在问题。为此,最好创建一个单独的键将其明确地指定为主键,这种唯一标识符在现实生话中很普遍,例如,身份证号、牌照号、订单号、学生标识号和航班号等。

⑷外键:如果一个关系R中包含另一个关系S的主键所对应的属性组F,则称此属性组F为关系R的外键,并称关系S为参照关系,关系R是依赖关系。为了表示关联,可以将一个关系的主键作为属性放入另外一个关系中,第二个关系中的那些属性就称为外键。

例如,同样是在图书管理系统数据库,有一个出版社表用来描述出版社的各种信息,如电话、地址和网址等,在该表中使用“出版社编号”作为主键。为了表示图书与出版社之间的联系,可以将出版社表中的主键“出版社编号”作为新列添加到图书明细表中。

在这种情况下,图书明细表中的“出版社编号”就被称为外键,因为“出版社编号”是其所在表以外(出版社表)的一个主键。当出现外键时,主键与外键的列名称可以是不同的。但必须要求它们的值集相同,即图书明细表中出现的“出版社编号”一定要和出版社表中的值匹配。

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

关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作。

关系数据库的数据操作语言(Data Manipulation Language,DML)的语句分为查询语句和更新语句两大类。查询语句用于描述用户的各类检索要求;更新语句用于描述用户的插入、修改和删除等操作。关系数据操作语言建立在关系代数基础上,具有以下特点。

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

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

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

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

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

●SELECT...INTO语句:用于创建一个查询表。

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

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

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

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

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

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

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

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

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

⑴信息准则:关系数据库中的所有信息都应在逻辑一层上用表中的值显式的表示。

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

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

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

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

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

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

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

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

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

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

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

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

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

●实体完整性:指关系的主属性(主键的组成部分)不能是NULL。NULL就是指不知道或是不能使用的值,它与数值0和空字符串的意义都不一样。

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

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

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

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

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

本节视频教学录像:2分钟

在数据库中,数据之间存在着密切的联系。关系数据库由相互联系的一组关系所组成,每个关系包括关系模式和关系值两个方面。关系模式是对关系的抽象定义,给出关系的具体结构;关系的值是关系的具体内容,反映关系在某一时刻的状态。一个关系包含许多元组,每个元组都是符合关系模式结构的一个具体值,并且都分属于相应的属性。在关系数据库中的每个关系都需要进行规范化,使之达到一定的规范化程度,从而提高数据的结构化、共享性、一致性和可操作性。关系模型原理的核心内容就是规范化概念,规范化是把数据库组织成在保持存储数据完整性的同时最小化冗余数据的结构的过程。规范化的数据库必须符合关系模型的范式规则。范式可以防止在使用数据库时出现不一致的数据,并防止数据丢失。关系模型的范式有第一范式、第二范式、第三范式和BCNF范式等多种。在这些定义中,高级范式根据定义属于所有低级的范式。第三范式中的关系属于第二范式,第二范式中的关系属于第一范式。下面介绍规范化的过程。

1.第一范式

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

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

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

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

如果关系模式R中的所有属性值都是不可再分解的原子值,那么就称此关系R是第一范式(First Normal Form,1NF)的关系模式。在关系型数据库管理系统中,涉及的研究对象都是满足1NF的规范化关系,不是1NF的关系称为非规范化的关系。例如,下图中的第四和第五行的2、3数组违反了第一范式,因为“商品编号”和“商品名称”属性每个都包含两个值。

如果要将这些数据规范化,就必须创建允许分离数据的附加表,这样才能使每个属性只包含一个值,每个数组包含相同数量的值,并且每个数组各不相同,如下图所示。这时的数据才符合第一范式。

2.第二范式

第二范式(2NF)规定关系必须在第一范式中,并且关系中的所有属性依赖于整个候选键。候选键是一个或多个唯一标识每个数据组的属性集合。例如,在下图所示的关系中,可以将“商品名称”和“供应商”名称指定为候选键。这些值共同唯一标识每个数组。在该图中“,库存编号”属性只依赖于“商品名称”,而不依赖于“供应商名称”属性。

3.第三范式

第三范式(3NF)同2NF一样依赖于关系的候选键。为了遵循3NF的指导原则,关系必须在2NF中,非键属性相互之间必须无关,并且必须依赖于键。例如,在下图所示的关系中,候选键“供应商代号”是属性。“商品名称”和“供应商名称”的属性都依赖于主键“库存编号”,并且相互之间进行关联。“供应商代号”属性依赖于“商品编号”,而不依赖于主键“库存编号”。

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

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

本节视频教学录像:4分钟

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

1.Oracle

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

2.SQL Server

SQL Server最早出现在1988年,当时只能在OS/2操作系统上运行。2000年12月微软发布了SQL Server 2000,该软件可以运行于Windows NT/2000/XP等多种操作系统之上,是支持客户机/服务器结构的数据库管理系统,它可以帮助各种规模的企业管理数据。随着用户群的不断增大,SQL Server在易用性、可靠性、可收缩性、支持数据仓库、系统集成等方面日趋完美。特别是SQL Server的数据库搜索引擎,可以在绝大多数的操作系统上运行,并对海量数据的查询进行了优化。目前,SQL Server已经成为应用最广泛的数据库产品之一。由于使用SQL Server不但要掌握SQL Server的操作,而且还要能熟练掌握Windows NT/2000 Server的运行机制,以及SQL语言,所以对非专业人员的学习和使用有一定的难度。

3.Sybase

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

4.DB2

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

5.Access

Access是在Windows操作系统下工作的关系型数据库管理系统。它采用了Windows程序设计理念,以Windows特有的技术设计查询、用户界面、报表等数据对象,内嵌了VBA(Visual Basic Application)程序设计语言,具有集成的开发环境。Access提供图形化的查询工具和屏幕、报表生成器,用户建立复杂的报表、界面无需编程和了解SQL语言,它会自动生成SQL代码。Access被集成到Office中,具有Office系列软件的一般特点,如菜单、工具栏等。与其他数据库管理系统软件相比,更加简单易学,普通的计算机用户即使没有程序语言基础,仍然可以快速地掌握和使用它。最重要的一点是,Access的功能比较强大,足以应付一般的数据管理及处理需要,适用于中小型企业数据管理的需求。当然,在数据定义、数据安全可靠、数据有效控制等方面,它比前面几种数据库产品要逊色不少。

2.5 MySQL数据库系统的体系结构

本节视频教学录像:3分钟

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

⑴支持接口:是指不同语言中与SQL的交互。

⑵管理服务和工具:系统管理和控制工具。

⑶连接池:管理缓冲用户连接、线程处理等需要缓存的需求。

⑷SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果,如select from就是调用SQL Interface。

⑸解析器:SQL命令传递到解析器的时候会被解析器验证和解析,解析器是由Lex和YACC实现的,是一个很长的脚本,其主要功能如下。

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

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

⑹查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。它使用“选取→投影→连接”策略进行查询。用一个例子就可以理解:

select uid,name from user where gender = 1;

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

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

⑺缓存和缓冲池:查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存、记录缓存、Key缓存、权限缓存等。

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

2.6 MySQL存储引擎

本节视频教学录像:2分钟

存储引擎是MySQL中一个重要的组成部分。MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在MySQL中,不需要在整个服务器中使用同一种引擎,应该针对具体的要求,对每一个表使用不同的存储引擎。

MySQL 5.6支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。其中InnoDB是支持事务型的存储引擎,从MySQL 5.5之后,InnoDB就是MySQL的默认事务引擎。InnoDB支持事务安全表(ACID),也支持行锁定和外键。InnoDB 为 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。

关于MySQL存储引擎的详细介绍以及如何选择存储引擎,在第4章会有详细讲解。

2.7 高手点拨

本节视频教学录像:1分钟

1.关系型数据模型的结构是什么?掌握关系模型的元素特性。

2.掌握关系型数据模型的完整性。

3.掌握关系型数据模型的范式:第一范式、第二范式、第三范式。

4.常见的关系型数据库有哪些?自查资料,了解它们的特点、差别,以及使用范围。

2.8 实战练习

1.查看MySQL能够支持的引擎。

2.查看各个引擎是否可用?并且支持哪种事务?

3.列表总结MySQL与Oracle的区别。

相关图书

Web应用安全
Web应用安全
MySQL是怎样使用的 快速入门MySQL
MySQL是怎样使用的 快速入门MySQL
MySQL是怎样运行的:从根儿上理解 MySQL
MySQL是怎样运行的:从根儿上理解 MySQL
深入浅出MySQL:数据库开发、优化与管理维护(第3版)
深入浅出MySQL:数据库开发、优化与管理维护(第3版)
MySQL数据库管理实战
MySQL数据库管理实战
PHP、MySQL和JavaScript入门经典(第6版)
PHP、MySQL和JavaScript入门经典(第6版)

相关文章

相关课程