前言:严格的来说,MYSQL是一款产品而不是一项技术。关于技术和产品的论述,请参考我的博文。现在进行小结一下。可以说数据库技术是为了解决数据之间如何聚合,聚合的数据如何管理的问题。为了实际上的真正应用,就必须选择一款相应的产品。所以说产品是技术的一个实例。从面相对象的逻辑来思考这个问题,数据库技术是一个类,而MYSQL是它的一个对象。

一、关于数据库。

1、为什么会产生数据库?

我们所俗称的电脑它的正式名称叫计算机,很明显计算机所要做的工作就是进行计算,而当你把它从数学这个学科的角度去理解,那么很明显计算需要数据,于是数据就产生了。在计算机中我们可以把很多现实中存在的实物和非实物都转化成数据。比如一个字母A,可能就变成了010101这样的数据。好的,数据不可能只有一个,所以这个数据量就会很大,这个时候我们需要考虑的是如何把相互关联的数据整合在一起?这样做的好处是便于查询,也方便管理,所以也就有了数据库的概念。关于学术上严禁的概念我不在这里复制了,任何一本数据库相关的书都会写到,我只想用更加通俗的语言去解释这个名词。数据库这个词我们可以从宏观和微观上来看。从微观上看,数据库就是数据的集合,这里集合的概念与数学中集合的概念相同。从宏观上看,数据库其实就是一个容器。你可以把他想象成一个杯子,一个碗,只不过里面盛放的不是水而是数据。

2、数据库与数据库管理系统。既然数据库是一个容器,实际上我们需要做的就是往容器里面放东西和取东西。那么必须有这么一套系统用来进行这些操作。这就是数据库管理系统。所以说我们常见的MYSQL ,MS SQL SERVER ,ORACLE等都是数据库管理系统。这里与现实不同的是,数据库管理系统创造的数据库之间是不能通用的。比如MYSQL造的容器像是一个试管,ORACLE造的容器像是一个广口瓶。

3、关系型数据库。前面说到了数据库像是一个容器。现在我们有新的问题了,虽然有容器了,但是我们还有一个问题没有解决。就是数据与数据之间依靠什么样的形式聚合在一起,不能像大烩菜一样混乱的放在一起吧。根据数据之间的联系不同,就不了不同类型的数据库,其中目前势力最大的,最火的就是关系型数据库。(近年来,面相对象的数据库开始流行起来了)所谓关系型数据库简单的理解就是一张二维表。数据之间都是靠这种二维表产生联系的。就像是你再用EXCEL画的一张表一样。关系型数据库就是由一张或多张这种表组成的。如果你总是被关系这个词搞的很迷糊,那么你就暂且关系型数据库=表数据库这么认为吧。

4、关系数据库的几个概念。

既然关系数据库是由表生成的,那么久需要理解几个概念了。

记录:我们把表中的每一行叫做一个“记录”,每一个记录包含这行中的所有信息。

字段;我们把每一列叫做一个“字段”。每个字段包含某一专题的信息。

值:在数据库中存放在表行列交叉处的数据叫做“值”,

这三个名词在所有关系数据库中都成立。

二、关于MYSQL数据库

这是一篇技术文章,所以关于MYSQL数据库的历史就不说了,有兴趣的朋友请自行BAIDU一下。目前MYSQL数据库的所有权归ORACLE公司所有。

1、为什么要用MYSQL

A、流行度高。MYSQL数据库在数据库技术领域中可能不能排名第一,但是个人认为排名一定在前十或前五。学习技术特别是一个产品一定学热门的东西。这样你从A公司使用熟悉后,又到了B公司可以继续使用。否则可能随着时间的流逝,你也会忘光的。特别是基于WEB站点,很多WEB都采用了LAMP架构,其中的M就是MYSQL数据库。即使像一些门户网站也是用该数据库。

B、体积小巧、安装简单。就和很多鼓吹ORACLE数据库是多么万能和强大的时候,其实它自身的问题也是缺点。MYSQL本身只有几十MB,即使加上一些ODBC,也不过100-200MB,这个体积要比ORACLE可要小的多。使用一张U盘就可以携带。这个看似没有优势,但是假设这样一种场景,你就会觉得优势出来了。我们假设在A主机安装了MYSQL数据库,因为一些原因,需要迁移到B主机上。B主机上还没有装数据库,而且是台远程主机,那么想一想体积小巧是不是迁移起来很方便呢?

C、开源软件。相比MS SQL和ORACLE,MYSQL这么受欢迎就是因为开源。我知道很多技术人本身从来也不关注产品成本或者说是二次开发、使用成本。开源虽然不等于免费,但是开源的软件总是带来以上的低成本。你不考虑是因为你没有上升到需要考虑这个问题的时候,如果你是一个CIO或者是运营总监之类,我相信你是会考虑的.

D. 跨平台。比如MS(微软的)SQL SERVER。MYSQL可以在很多操作系统下安装运行。除了流行的WINDOWS和LINUX,甚至还可以在一些FREE BSD等其它操作系统下安装运行。

E.支持多种编程语言。C++ 、JAVA、PHP等多种编程语言都有数据库驱动接口,可以开发MYSQL数据库。

2、MYSQL基于C/S通信模式。像MS SQL,ORACLE和MYSQL都是基于C/S的模式。这种模式和其它的C/S模式一样便于通过网络来访问数据库。需要值得新手注意的是一般情况下mysql说的是基于mysql自带的客户端管理工具,而大写的MYSQL才是服务器端数据库程序。在LINUX下一般叫做mysqld。服务器端没有人机界面,需要通过客户端连接到服务器端去管理、操作数据库。

3.关于MYSQL与MS SQL的比较

面是 MySQL 开发小组自己写的比较文章:MySQL 与 mSQL (MS SQL)的比较
因为没有线程创建开销、一个较小的语法分析器、较少功能和简单的安全性,mSQL应该在下列方面更快些:

  1. 执行重复的连接和断开的测试,在每个连接期间运行一个非常简单的查询。
  2. 有很少的列和键的插入很简单的表的INSERT操作。
  3. CREATE TABLE和DROP TABLE。
  4. 在不是一个索引的一些东西上SELECT。(一个表扫描是很容易的。)


因为这些操作是如此简单,当你有更高的启动开销时,很难在这些方面变得更好。在连接被建立以后,MySQL应该性能好一些。在另一方面,MySQL比mSQL(以及大多数其他的SQL实现)在下列方面更好些
 

  1. 复杂的SELECT操作。
  2. 检索较大的结果(MySQL有一个更好、更快并且更安全的协议)。
  3. 有变长字符串的表,因为MySQL有更有效的并可在VARCHAR列上索引。
  4. 有很多列的表的处理。
  5. 由长记录的表的处理。
  6. 有很多许多表达式的SELECT。
  7. 在大表上的SELECT。
  8. 同时处理很多连接。MySQL充分是完全多线程化的,每个连接有它自己的线程,这意味着没有线程必须等待另一个线程(除非一个线程正在修改一张表,另外的线程想要存取)在mSQL中,一旦一个连接被建立了,所有其它线程必须等到第一个线程完成,不管连接正在运行的查询是短的或是长的。当第一个连接终止时,下一个才能工作,而此时所有其它线程再次等待,等等。
  9. 联结。如果你改变一个SELECT中的表的顺序,mSQL可能变得异常地慢。在基准套件中,比MySQL要慢超过15000倍的时间。这是由于mSQL缺乏一个联结优化器以便以最佳的顺序排定表。然而,如果你把表按完全正确的顺序放在mSQL2中并且WHERE是很简单的并使用索引列,联结将相对快些!见10.8 使用你自己的基准。
  10. ORDER BY和GROUP BY。
  11. DISTINCT。
  12. 使用TEXT或BLOB列


 

三、为什么要学MYSQL

我个人认为这是我骗文章着重要强调的,也是一般的文章不会提到的。学习是通过需求来决定的,盲目的学习其实收获不大。尽管MYSQL是一款数据库关系系统产品,但是做为能动性的人,你的工作性质决定了你要学习的内容。我给它分了三个层次,与其说是层次不如准确点说是三个方向。

1、程序开发人员。程序开发人员需要通过对MYSQL的学习要达到利用MYSQL去创造出一款基于MYSQL的数据库。所以程序人员的重点是如何创建一个自己需要的MYSQL数据库。除了自己编程的知识,数据结构的知识,SQL语句的熟练至精通的掌握程度,他们只需要创造出适合他们的MYSQL数据库就够了。所以它们并不是特别关注MYSQL的搭建,MYSQL的管理,甚至是基于MYSQL的优化(它们一般更多的关注的是优化数据库本身,而不是MYSQL数据库系统)

2、数据库管理员。与程序开发人员不同的是,数据库管理员需要熟练掌握MYSQL的搭建(特别是在不同OS下,数据库的日常管理。数据库的权限管理,包括更深入的数据库系统的优化工作。资深的数据库管理人员可以与系统架构人员一同探讨如何搭建一个让自己满意而相对完美的数据库系统环境。

3、系统管理员、系统架构师。在没有专职的数据库管理员得企业,系统管理员要承担数据库管理员的大部分角色。即使有了数据库管理员,系统架构师得级别可能要针对整个系统的优化,比如基于LAMP,那么除了要熟练甚至精通MYSQL,还必须熟悉LINUX,APACHE,和PHP等产品。找出它们之间的瓶颈,从而改良架构。

本系列的文章内容主要倾向于后2个方向。

四、推荐学习MYSQL书籍

关于MYSQL的图书很多。不过学习者一定要根据自己的需求来购买。按照我上面分类的三个方向进行选书。基本上图书有一部分是针对开发人员的,有一部分是针对数据库管理员的。但是从我读过的有限的几本来看,没有一本是完美针对某个方向的,只是在章节和内容上更倾向哪个方向。

关于数据库管理员,我建议阅读《MYSQL权威指南》这本书写的不错,主要针对数据库管理人员,也是一本入门书。另外到一定水平后,可以阅读《高性能MYSQL》这本书,主要讲的是如何优化MYSQL。这本书有一定难度,不适合新书阅读。如果是开发人员,新手可以读一读《MySQL入门很简单》这本书。再次提醒大家,一定要买针对方向的书,否则那真是买来无用了。

另外对于新手,一定要买一本教程系统的学习一下,不要从网上到处乱抓,那么学习到的知识点是散的,无法串联起来使用,会让你一头雾水。

在下一章中,讲着重叙述MYSQL的安装和常用的MYSQL管理工具。

本文可能会不断优化,希望阅读者能提出宝贵意见,我好及时修改。

                                                                                                  2011-5-2 第二次修改稿