1、第1章 数据库概述简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server和MySQL等诸多优秀的数据库。本章将讲解的内容包括如下:q 数据存储方式;q 数据库泛型;q 数据库在开发中作用;q SQL语言;q 数据库访问技术;q 常见数据库系统;q MySQL数据库的介绍;q 如何学习数据库。通过本章的学习,读者可以了解为什么要使用数据库?什么是数据库泛型?什么是SQL语言?如何访问数据库?常见的数据库有哪些等。同时,
2、读者可以了解MySQL数据库的优势和如何获得MySQL数据库。最后,读者将会了解如何学习数据库。1.1 数据库理论基础数据库能够将数据按照特定的规律组织起来。那么,数据是如何存储的?数据库要遵守什么规则?数据库在什么地方使用?这些都是首先要了解的问题。本节将为读者介绍这些问题。1.1.1 数据存储方式如今数据库已经无处不在了。一个网站需要有数据库来存储数据;一个学校需要用数据库来存储学生和教师的信息;一个公司需要用数据库来存储员工的信息和公司的资料。要学习数据库,必须先要了解数据库是如何存储数据的。本小节将为读者介绍数据的存储方式。数据存储分为3个阶段即人工管理阶段、文件系统阶段和数据库系统阶
3、段。1人工管理阶段在计算机发展的早期,它的主要作用是进行科学计算。而且,计算机存储设备还没有发展起来?数据主要是存储在纸带、磁带等介质上,或者直接通过手工记录。%说明:美国人Herman Hollerith(18601929年)根据提花织布机的原理发明了穿孔片计算机,通过纸带来存储数据。在19世纪50年代,IBM最早把盘式磁带用在数据存储上。一卷磁带可以代替1万张打孔纸卡。随着技术的发展,逐渐出现了磁鼓、软盘、硬盘和光盘等存储设备。这个阶段,数据都是依靠人工进行整理和保存的。使用这种方式来管理数据很不方便。例如,不便于查询数据、难以共享数据和不便于保存。现在,国内的一些部门还处在人工管理数据的
4、阶段,还需要管理大量的纸质文件。2文件系统阶段随着计算机操作系统的出现和硬件的发展,可以将数据存储在计算机的磁盘上。这些数据都以文件的形式出现,然后通过文件系统来管理这些文件。文件系统通过文件的存储路径和文件名称来访问文件中的数据。文件系统可以很好的保存文件,使用起来也很方便。相对于人工管理阶段而言,文件系统使得数据管理变得简单。至少不用为了一个文件而翻箱倒柜的查找了。但是,这些文件中的数据没有进行结构化处理,查询起来还不是很方便。3数据库系统阶段随着数据量的增加和处理速度的要求,文件系统渐渐地不能满足数据管理的要求了。数据库系统阶段开始使用专门的数据库来管理数据。用户可以在数据库系统中建立数
5、据库,然后在数据库中建立表,最后将数据存储在这些表中。数据库是指长期存储在计算机内、有组织的和可共享的数据集合。简而言之,数据库就是一个存储数据的地方。表是数据库存储数据的基本单位。一个表由若干字段组成。例如,某个学校有个学生管理系统,其中的数据可以存储在名为student的数据库中。在student数据库中,可以为每个班级的学生建立一张表。表中包含学生的学号、姓名、性别和籍贯等信息。学号、姓名等就是这个表中的字段。可以根据这些字段来找到学生的相应信息。数据库和表都存储在磁盘上,但用户不必关心它们在磁盘上的具体位置。用户可以直接通过数据库管理系统来查询表中的数据。现在使用最多的数据库是关系数据
6、库。Oracle、SQL Server和MySQL等数据库都是关系数据库。关系数据库中的表都是二维表。1.1.2 数据库泛型数据库泛型就是数据库应该遵循的规则。数据库泛型也称为范式。目前,关系数据库最常用的4种范式分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCN范式(BCNF)。本小节将为读者简单地介绍一下范式的内容。在设计数据库时,数据库需要满足的最低要求的范式是第一范式。第一范式的要求即表中不能有重复字段,并且每个字段不能再拆分。如果一个数据库连第一范式都不能满足的话,那就不能称之为关系数据库了。只有满足了第一范式的要求,才可以在这个关系数据库中创建表。在满足第一范
7、式的基础上,可以将数据库中进行进一步的细化。细化后可以使数据库满足第二范式的要求。依次进行细化,可以得到第三范式、BCN范式。%说明:例如,一个学生表中有学号、院系号和院系名这3个字段。因为学号可以决定是院系名,院系号也可以决定院系名。因此,这个表不是第二范式。现在对该表进行细化,细化后生成两个表。第一个表有学号、院系号这两个字段。第二个表有院系号、院系名这两个字段。这样就满足了第二范式的要求。通常情况下,如果一个数据库能够满足第三范式的要求,那么这个数据库就是一个很好的数据库了。当一个数据库达到第三范式的要求,数据库中基本上没有冗余的内容了。但是,有时为了满足查询速度等要求,可以有意识的让某
8、些表有些冗余。这是为了提高整个数据库的性能。因此,在设计数据库时,不一定要拘泥于达到第三范式或者BCN范式。只要数据库的设计能提高整个系统的性能,这就是一个合理的数据库。1.1.3 数据库在开发中作用现在大部分的管理系统和软件都需要使用数据库来存储数据。在开发过程中,数据库已经成为必不可少的一部分。本小节将为读者简单介绍一下数据库在开发中的作用。在软件开发过程中,经常需要使用数据库来存储数据。例如,一个学校的学生管理系统就需要数据库来存储学生的学籍信息、考试信息、教师的信息和课程信息等。再比如,银行的管理系统也需要数据库来存储信息。用户的银行账户、存款量、存款和取款的记录等信息都是存储在数据库
9、中的。当用户向自己的账户里存款时,管理系统会在数据库中更新该用户的存款量。笔者曾经开发过一个驾校的学员管理系统。在这个管理系统中,笔者就使用了MySQL数据库来存储管理员的信息、驾校学员的学籍信息和学员的考试信息等。然后通过网页的应用程序查询数据库中的数据、更新数据和删除数据。例如,管理员要登录系统就必须输入用户名和密码。然后网页的应用程序将管理员输入的用户名和密码与数据库表中的数据进行比较。如果表中存在这个用户名和密码,就允许管理员登录。笔者还为某供电局开发过一个定值单管理的软件。在这个软件中,需要存储管理员的信息、用户的信息和定值单的信息等。笔者也是选择MySQL数据库来存储这些数据的。然
10、后通过页面的应用程序来处理数据库中的数据。%说明:数据库的使用范围非常广泛,各行各业中都已经有了数据库的应用。例如,电力行业需要数据库来存储发电量、供电量和电费等信息;石油行业需要数据库来存储有关石油的数据;金融行业需要使用数据库来存储各种金融数据。总而言之,数据库已经成为了软件开发不可缺少的一部分。如果没有数据库,这个软件将无法获得数据,也无法将执行后的数据保存。1.2 数据库技术构成数据库技术的出现是为了更加有效地管理和存取大量的数据资源。简单地讲,数据库技术主要包括数据库系统、SQL语言和数据库访问技术等。本节将为读者介绍数据库技术的内容。1.2.1 数据库系统很多读者认为数据库就是数据
11、库系统(DataBase System,简称为DBS)。其实,数据库系统的范围比数据库大很多。数据库系统不是一个单纯的数据库,而是由数据库、数据库管理系统、应用开发工具等构成。很多时候,数据库管理员和用户也可以当成数据库系统的一份子。本小节将为读者介绍数据库系统的内容。前面的章节对数据库已经进行了简单地介绍,数据库就是存储数据的地方。数据库管理系统(DataBase Management System,简称为DBMS)是用来定义数据、管理和维护数据的软件。它是数据库系统的一个重要的组成部分。应用系统是需要使用数据库的软件。比如学员管理系统就是一个应用系统。这个应用系统需要数据库来管理它的数据。
12、应用开发工具就是用来开发应用系统的。除了上述的软件部分以外,数据库系统还包括数据库管理员和用户。因为,依靠单纯的数据库管理系统来管理数据库中的数据是不现实的。很多时候需要一些专门管理这些数据的专业人员。这些管理数据的专业人员就是数据库管理员(DataBase Administrator,简称为DBA)。通常在大型的公司都需要有专门的数据库管理员。例如,网易就有专业的DBA组,他们主要负责管理和维护数据库。用户一般不直接与数据库接触,而是通过应用系统来使用数据。1.2.2 SQL语言SQL(Structured Query Language即结构化查询语言)。数据库管理系统通过SQL语言来管理数
13、据库中的数据。本小节将为读者介绍SQL语言的知识。SQL语言是一种数据库查询和程序设计语言。其主要用于存取数据、查询数据、更新数据和管理关系数据库系统。SQL语言是IBM公司于1975年1979年之间开发出来的,主要使用于IBM关系数据库原型System R。在20世纪80年代,SQL语言被美国国家标准学会(American National Standards Institute,简称为ANSI)和国际标准化组织(International Organization for Standardization,简称为ISO)通过为关系数据库语言的标准。SQL语言分为3个部分数据定义语言(Data
14、 Definition Language,简称为DDL)、数据操作语言(Data Manipulation Language,简称为DML)和数据控制语言(Data Control Language,简称为DCL)。q DDL语句:数据定义语言主要用于定义数据库、表、视图、索引和触发器等。其中包括CREATE语句、ALTER语句和DROP语句。CREATE语句主要用于创建数据库、创建表和创建视图等。ALTER语句主要用于修改表的定义、修改视图的定义等。DROP语句主要用于删除数据库、删除表和删除视图等。q DML语句:数据操纵语言主要用于插入数据、查询数据、更新数据和删除数据。其中包括INSE
15、RT语句、SELECT语句、UPDATE语句和DELETE语句。INSERT语句用于插入数据;SELECT语句用于查询数据;UPDATE语句用于更新数据;DELETE语句用于删除数据。q DCL语句:数据控制语言主要用于控制用户的访问权限。其中包括GRANT语句和REVOKE语句。GRANT语句用于给用户增加权限;REVOKE语句用于收回用户的权限。数据库管理系统通过这些SQL语句可以操作数据库中的数据。在应用程序中,也可以通过SQL语句来操作数据。例如,可以在Java语言中嵌入SQL语句。通过执行Java语言来调用SQL语句,这样即可在数据库中插入数据、查询数据。SQL语句也可以嵌入到C#语
16、言、PHP语言等编程语言中。1.2.3 数据库访问技术应用系统中,程序语言需要使用数据库访问技术来访问数据库。只有使用数据库访问技术,程序中嵌入的SQL语句才会起作用。不同程序语言访问数据库的方式是不一样的。本小节将为读者简单讲解各种数据库访问技术。不同的程序语言使用不同的数据库访问技术。早期的数据库访问技术是ODBC(Open Database Connectivity)。C#语言通过ADO.NET来访问数据库。Java语言使用JDBC(Java Data Base Connectivity)来访问数据库。使用这些数据库访问技术时,必须要另外安装相应的驱动程序。ODBC 技术为访问不同的关系
17、数据库提供了一个共同的接口。通过ODBC提供的接口,应用程序可以连接数据库。然后,可以执行SQL语言来操作数据库中的数据。ODBC提供的接口提供了最大限度的互操作性。使用ODBC来访问MySQL数据库时,必须安装驱动程序Connector/ODBC。ADO.NET是微软公司提供的组件。用户可以通过ADO.NET提供的方法来访问数据库。ADO.NET是在.NET框架下优先使用的数据访问接口。使用ADO.NET来连接MySQL数据库时,必须安装驱动程序Connector/Net。JDBC是一种用于执行SQL语句的Java API。Java语言通过JDBC可以访问多种关系数据库。JDBC由一组用Ja
18、va语言编写的类和接口组成。使用JDBC时,必须要安装驱动程序Connector/J。PHP中为程序员提供了MySQL功能模块,PHP 5以后开始提供mysqli接口。PHP可以通过MySQL功能模块和mysqli接口来访问MySQL数据库。1.3 MySQL基础现在数据库的版本很多,如Oracle、DB2、SQL Server都是很优秀的商业数据库。同时,还有MySQL、PostgreSQL都是很优秀的开源数据库。MySQL数据库的使用已经非常广泛了。本节将为读者介绍常见的数据库系统,以及MySQL数据库的基本知识。1.3.1 常见数据库系统如今已经存在很多优秀的商业数据库,如甲骨文(Ora
19、cle)公司的Oracle数据库、IBM公司的DB2数据库、微软公司的SQL Server数据库和Access数据库。同时,还有很多优秀的开源数据库,如MySQL数据库、PostgreSQL数据库等。本小节将为读者介绍这些常见的数据库。1甲骨文的Oracle甲骨文公司是世界领先的数据库软件开发商。甲骨文公司的Oracle数据库可以当之无愧的称为当今世界最优秀的数据库。财富排行榜上的前1000家公司几乎都采用Oracle数据库。而且Oracle数据库是世界上第一个支持SQL语言的数据库。Oracle数据库主要应用于大型系统。但是,该数据库非常复杂,管理起来很不方便。在2009甲骨文全球大会上,甲
20、骨文公司宣布最新版Oracle服务器虚拟化软件Oracle VM 2.2正式上市。2IBM的DB2DB2是IBM公司研制的一种关系型数据库系统。主要应用于OS/2、Windows等平台下。DB2提供了高层次的数据利用性,数据的完整性好。而且DB2的安全性高,具有很强的可恢复性。DB2数据库主要应用于大型系统当中。3微软的Access和SQL ServerAccess数据库是微软公司开发的小型数据库。Access数据库是微软的Office系列软件的一部分,其主要应用于小型的系统中。SQL Server数据库也是由微软公司开发的,主要应用于大型的管理系统当中。而且该数据库与微软的Windows系列
21、操作系统的兼容性很好。但是,由于该数据库是微软公司的专有软件,因此还不能够在UNIX和Linux操作系统上运行。目前,最新的SQL Server数据库是SQL Server 2008。%注意:Access数据库和SQL Server数据库都是微软公司的产品,只能在微软公司的Windows系列的操作系统上运行。而Oracle、DB2、PostgreSQL和MySQL这些数据库都是可以跨平台的。它们不仅可以在Windows系列的操作系统运行,还可以在UNIX、Linux和Mac OS等操作系统上运行。4开源PostgreSQLPostgreSQL数据库是一个开放源代码的数据库。该数据库是在加州大学
22、伯克利分校计算机系的POSTGRES项目的基础上产生的。1994年,Andrew Yu和Jolly Chen在POSTGRES中增加了SQL语言的解释器。随后将数据库的源代码发布到因特网上供所有人使用。现在,PostgreSQL数据库已经是个非常优秀的开源项目。很多大型网站都是使用PostgreSQL数据库来存储数据。5开源MySQLMySQL数据库也是一个开放源代码的数据库。MySQL是由瑞典MySQLAB公司开发的。据称,MySQL的开发者之一Monty Widenius的女儿也叫My,因此将该数据库取名为MySQL。MySQL的发展速度非常快,现在很多网站已经使用MySQL数据库。很多国
23、内的大型网站也已经使用MySQL,如新浪、网易等。1.3.2 为什么要使用MySQL如今很多大型网站已经选择MySQL数据库来存储数据。那么,MySQL到底有什么优势呢?本小节将为读者介绍选择MySQL数据库的原因。MySQL数据库的使用以及非常广泛,尤其是在Web应用方面。由于MySQL数据库发展势头迅猛,Sun公司于2008年收购了MySQL数据库。这笔交易的收购价格高达10亿美元。这足以说明MySQL数据库的价值。MySQL数据库有很多的优势,下面总结了其中几种。1MySQL是开放源代码的数据库MySQL是开放源代码的数据库,任何人都可以获取该数据库的源代码。这就使得任何人都可以修正My
24、SQL的缺陷。并且任何人都能以任何目的来使用该数据库。在此不得不提到Richard Stallman的GUN工程和GPL协议。Richard Stallman提出GNU(GNU is Not UNIX)工程,提出了自由软件的思想。GNU工程提出了GPL(GNU General Public Licence)许可协议。该工程的目的是为用户提供可以自由使用的软件。MySQL作为一款自由软件,完全继承了GNU的思想。这保证了MySQL是一款可以自由使用的数据库。2MySQL的跨平台性MySQL不仅可以在Windows系列的操作系统上运行,还可以在UNIX、Linux和Mac OS等操作系统上运行。因
25、为很多网站都选择UNIX、Linux作为网站的服务器,所以MySQL的跨平台性保证其在Web应用方面的优势。虽然微软公司的SQL Server数据库是一款很优秀的商业数据库,但是其只能在Windows系列的操作系统上运行。因此,MySQL数据库的跨平台性是一个很大的优势。3价格优势MySQL数据库是一款自由软件。任何人都可以从MySQL的官方网站下载该软件。这些社区版本的MySQL都是免费使用的。即使是需要付费的附加功能,其价格也是很便宜的。相对于Oracle、DB2和SQL Server这些价格昂贵的商业软件,MySQL具有绝对的价格优势。4功能强大且使用方便MySQL是一个真正的多用户、多
26、线程SQL数据库服务器。它是以客户机/服务器结构的实现,由一个服务器守护程序mysqld和很多不同的客户程序和库组成。它能够快速、有效和安全的处理大量的数据。相对于Oracle等数据库来说,MySQL的使用是非常简单的。MySQL主要目标是快速、健壮和易用。上面是MySQL数据库的一些基本优势。现在甲骨文公司出资74亿美元收购Sun公司。很多人为MySQL的前途担忧,认为一旦收购成功,甲骨文公司就会对MySQL数据库痛下毒手。笔者认为这样的情况是不会出现的。毕竟MySQL数据库是一个开放源代码的数据库。即使甲骨文公司不支持MySQL的发展,MySQL也依然会在众多爱好者的支持下不断发展壮大。因
27、此,MySQL数据库的前途依然是不可限量的。1.3.3 MySQL版本和获取MySQL数据库可以在Windows、UNIX、Linux和Mac OS等操作系统上运行。因此,MySQL有不同操作系统的版本。而且,根据发布的先后顺序,现在已经在开发MySQL的6.0版了。本小节将为读者介绍MySQL的版本和如何下载MySQL。根据操作系统的类型,MySQL数据库大体上可以分为Windows版、UNIX版、Linux版和Mac OS版。因为UNIX和Linux操作系统的版本很多,不同的UNIX和Linux版本有不同的MySQL版本。因此,如果要下载MySQL,必须先了解自己使用的是什么操作系统。然后
28、根据操作系统来下载相应的MySQL。根据用户群体的不同,MySQL数据库可以分为社区版(Community Edition)和企业版(Enterprise)。社区版是自由下载且完全免费的,但是没有官方的技术支持。企业版是收费的,而且不能下载。但是企业版拥有完善的技术支持。如果是个人学习,可以选择社区版。企业版一般都是适合企业使用的。根据发布顺序来区分,MySQL数据库可以分为4.1、5.0、5.1等版本。MySQL官方网站上现在提供4.1、5.0、5.1、5.4和6.0等版本的下载。当然,官方网站上也提供一些很老的版本的MySQL的下载。但是,5.4版本现在处于测试阶段,6.0版本还处于开发当
29、中。根据MySQL的开发情况,可以将MySQL分为Alpha、Beta、Gamma和Generally Available(GA)等版本。这几种版本的说明如下。q Alpha。该版本处于开发阶段,可能会增加新的功能或进行重大修改;q Beta。该版本处于测试阶段,开发已经基本完成,但没有进行全面的测试;q Gamma。该版本是发行过一段时间的Beta版,比Beta版要稳定一些;q Generally Available(GA)。该版本已经足够稳定,可以在软件开发中应用了。也有些称为Production版。%说明:在mysql-essential-6.0.11-alpha-win32.msi中,
30、essential表示该版本包含了MySQL中的必要部分,但不包含一些不常用的部分;“6”表示主版本号,所有版本6的MySQL拥有相同的文件格式;“0”表示发行级别;“11”表示该级别下的版本号;alpha表示该版本处于开发中;win32表示该版本运行在Windows操作系统下;msi是该安装文件的格式。读者可以到1.4 如何学习数据库数据库已经成为软件系统的一部分,那么学好数据库将是软件开发的一个必要条件。如何才能学好数据库,这个问题没有确切的答案。笔者在本节与读者分享一下自己学习的经验。学好数据库,最主要的是要多练习。笔者将自己学习数据库的方法总结如下:1多上机实践要想熟练的掌握数据库,就
31、必须经常上机练习。只有在上机实践中才能深刻体会数据库的使用。通常情况下,数据库管理员工作的时间越长,其工作经验就越丰富。很多复杂的问题,都可以根据数据库管理员的经验来很好地解决。上机实践的过程中,可以将学到的数据库理论知识理解得更加透彻。本书后面的章节都会有上机实践的小节。希望通过这些实践能够让读者对每个章节的内容都能理解得很透彻。2多编写SQL语句SQL语句是数据库的灵魂。数据库中的很多操作都是通过SQL语句来实现的。虽然现在的数据库都有易用的图形界面,可以直接在图形界面上创建数据库和表。但是,图形界面却掩盖了这些操作是如何实现的。只有经常使用SQL语句来操作数据库中的数据,读者才可以更加深
32、刻地理解数据库。本书为读者准备了很多使用SQL语言编程的例子。希望读者能够通过编写SQL语句能够更好地学习数据库。3通过Java等编程语言来操作数据库开发的软件系统中都需要使用数据库。软件开发者学习数据库的最终目的就是在软件开发中使用数据库。因此,在学习过程中,多思考一下如何使用Java等程序语言来操作数据库。最好多编一些程序来操作数据库。这样,既可以加深对数据库的理解,也可以提高自己的编程能力。4数据库理论知识不能丢数据库理论知识是学好数据库的基础。虽然理论知识会有点枯燥,但是这是学好数据库的前提。如果没有理论基础,学习的东西就不扎实。例如,数据库理论中会讲解E-R图、数据库设计原则等知识。
33、如果不了解这些知识,就很难独立设计一个很好的数据库及表。读者可以将数据库理论知识与上机实践结合到一起来学习,这样效率会提高。1.5 常见问题及解答1如何选择数据库?Oracle、DB2、SQL Server数据库主要应用于比较大的管理系统当中。Access、MySQL、PostgreSQL属于中小型的数据库,主要应用于中小型的管理系统。SQL Server和Access数据库只能在Windows系列的操作系统上运行,其与Windows系列的操作系统有很好的兼容性。Oracle、DB2、PostgreSQL、MySQL都可以运行在UNIX和Linux操作系统上。但是,Oracle和DB2都比较复
34、杂。MySQL和PostgreSQL都非常易用,但性能不如Oracle。因此,在选择数据库时,要根据运行的操作系统和管理系统的情况来选择数据库。2如何选择MySQL版本?MySQL数据库能够在UNIX、Linux、Windows和Mac OS等操作系统上运行。每种数据库都有相应的版本。UNIX版本又分为在HP-UX、OS/2上安装的MySQL版本。Linux版本的MySQL分为在SUSE、Redhat上安装的MySQL版本。因此,在选择MySQL数据库时,首先应该确认操作系统的版本,然后再选择是安装源码包还是安装二进制软件。1.6 小 结本章介绍了数据库和MySQL的基础知识。通过本章的学习,希望读者对数据库、MySQL数据库和SQL语言等知识有所了解。而且,希望读者能够了解常用的数据库系统。关于数据库泛型的知识难度比较大,读者只要能够了解相关知识就行了。下一章将介绍在Windows操作系统下安装和配置MySQL。如果读者是Linux用户,可以跳过下一章直接学习第3章。1.7 本 章 习 题1数据存储的发展过程经历了哪几个阶段?2常用数据库系统有哪些?3MySQL数据库如何分类?