MySQL是目前最流行的开放源代码数据库管理系统,全世界的装机量已超过400万台。本书详细介绍了如何使用可定制的MySQL数据库管理系统支持健壮的、可靠的、任务关键的应用程序。全书共分四部分21章,分别从MySQL的安装与配置,创建与使用数据库和表,数据的查询与运算,事务处理,MySQL的管理与配置,备份与恢复,性能优化,MySQL与C,Perl,PHP的开发接口等不同角度阐述了MySQL的特点。本书在内容上注重全面性,几乎涉及了与MySQL相关的所有主题,是一本完整的MySQL参考手册。
本书适合于准备用MySQL进行系统开发的设计人员和编程人员学习和参考,也适合用做软件专业本专科水平的教科书。
MySQL是目前最流行的开放源代码数据库管理系统,全世界的装机量已超过400万台。本书详细介绍了如何使用可定制的关系数据库管理系统支持健壮的、可靠的、任务关键的应用程序。在编排上从最基本的SQL概念讲起,介绍如何在Linux/UNIX或Windows平台上安装、配置和测试MySQL数据库,如何使用MySQL的数据类型、语句、运算符和函数,利用数据定义语言(DDL)管理数据库和表,利用数据操纵语言(DML)添加、删除和查询记录,利用事务支持,实现MySQL的五层访问控制和权限系统,如何处理数据库优化、备份、恢复和复制以及用C,C++,Perl,Java,PHP和其他语言创建应用程序。本书是为MySQL用户、开发者和数据库管理员准备的一本综合性参考书。它包含了关于MySQL(包括MySQL 4.x)的详尽信息,全面涵盖了与MySQL配置相关的从软件安装和配置到数据备份和复制的所有主题。
本书是以一个共同的目的面向大量读者的:一种在自己的系统上学习如何最好地配置和使用MySQL的期望。不管你是一个寻找免费的数据库系统并在上面练习SQL的学生,一个对创建基于MySQL的应用程序感兴趣的开发者,一个关心把数据移植到MySQL以降低成本的数据库管理员,本书都包含了研究和运行强大的开放源代码应用程序所需要的理论和实践示例。相信本书会成为读者案头一本实用的参考手册。
本书由徐小青(第一部分和第二部分)、路晓村(第三部分和第四部分)翻译,由薛荣华审校。参加本书译录校工作并给予大力协助的还有王景中、薛菲、闫慧娟、曹汉征、姚栋、许秀英、王泰东、李可、郭淼、矫克民、刘东顺、王建成、薛亮、沈兰英等同志。电子工业出版社的编辑们为此书的出版做了大量艰苦细致的工作,译者谨向他们表示衷心的感谢。译者水平有限,不妥之处欢迎读者批评指正。谢谢!
自1996年开始,从一个简单的SQL工具到当前的“世界上最受欢迎的开放源代码数据库”地位,MySQL已经走过了一段很长的路。根据MySQL AB(MySQL的开发者)发布的信息,到2003年,MySQL的装机量在全世界已超过400万台。MySQL为Internet网站、搜索引擎、数据仓库、任务关键的软件应用和系统提供动力,它得到了像Sony,Xerox,HP和NASA这样的公司或组织的积极使用。简而言之,它无处不在,它的应用将会变得更广泛。
我们不难发现这样疾速增长的原因。相对于像Oracle和Microsoft SQL Server一样的更商业化、非开放源代码的系统来说,快速、健壮和友好的数据库引擎、高级的数据管理和恢复工具、不断改进的特性集合、遵守现有的SQL标准、友好的商业许可原则,都是促成MySQL成为可实施的选择因素。MySQL的较低总体拥有成本和更稳定、更安全的系统特性,使越来越多的企业把它们的系统移植到MySQL,并且收获着MySQL开放源代码带来的效益。
这就是本书的作用所在。如果你是一位承担着把RDBMS系统移植到MySQL的任务的业务专家,一个对创建基于MySQL的应用程序感兴趣的开发者,或者仅仅是一个对MySQL和它能为我们做什么感到好奇的爱好者,本书就是将你引入MySQL世界的惟一地图。
综述
本书是为MySQL用户、开发者和数据库管理员设计的一本综合性的参考书,它包含了关于MySQL RDBMS(包括MySQL 4.x)的详尽信息,全面覆盖了与MySQL配置相关的所有主题,包括软件安装和配置、数据备份和复制等。
本书还详细探讨了结构化查询语言(SQL)的MySQL特殊用法,深入研究了创建和管理数据库和表的命令,插入、更新和删除记录,创建满足特定条件的报表,使用连接和子查询,通过关键字执行数据完整性和优化查询,以求更快的速度和效率。
本书也没有忘记MySQL开发者,在书中包含特殊的几章,它专门适合基于MySQL的应用程序开发,为致力于MySQL体系结构,并且对它感兴趣的开发者提供了现实的指南和技巧。
读者
本书是以一个共同的目的面向大量读者的:一种在自己的系统上学习如何最好地配置和使用MySQL的期望。不管你是一个寻找免费的RDBMS并在上面练习SQL的学生,一个对创建基于MySQL的应用程序感兴趣的开发者,一个关心把数据移植到MySQL以降低成本的数据库管理员,本书都包含了研究和运行这个强有力的开放源代码应用程序所需要的理论和实践示例。
与其他很多书籍不同,本书没有假定读者预先具有SQL知识和数据库基础。相反,它通过举例、使用教程和现实世界的实例来解释基本概念,从而增进读者对MySQL RDBMS的熟悉程度。在后面的章节中,将鼓励读者在自己的MySQL环境里试验各种实例。这样做不会破坏任何东西,反而会使读者从亲身的经历中收获大量的知识。
本书以教程和参考向导两种形式进行组织,所以可以用读者喜欢的任意次序阅读它。这里有一些建议:
● 如果你是MySQL初学者,按照次序阅读各章会比较容易,可以按结构化的方式学习基本知识。这是推荐的方法,MySQL的新用户应该采用它。
● 如果你已经使用过MySQL,可能更喜欢把本书作为一本桌面参考书,可随意把它翻到需要的位置来阅读特别的主题。
● 如果你是一位专家(比如数据库管理员或Web开发者),本书包含单独的关于MySQL管理和开发的部分,专门设计用来解决最经常遇到的问题,并且提供了所有与读者工作性质相关的问题和主题的信息。
组织
本书分为四个部分,下面列出了每部分包含的内容。
第一部分提供MySQL的简介,并且指导在UNIX和Windows上安装MySQL。
第1章探讨了MySQL的历史和发展,它的特性,并且解释了为什么它能提供如此引人注目的价值。
第2章粗略讲解了MySQL的优点,解释了各种MySQL子系统以及它们是如何相互配合的。
. 第3章研究如何在UNIX和Windows上获得、安装、配置和测试MySQL服务器版本。还从有助于读者选择恰当的服务器版本的角度出发,解释了可以使用的不同MySQL服务器版本之间的差异。
第二部分讲述MySQL服务器的实际应用,解释了怎样使用SQL命令集来创建数据库和表、添加和删除记录、执行查询和使用诸如事务和子查询之类的高级MySQL 4.x特性。
第4章讲述SQL的历史和发展,此外还包括一个简单的教程,使新用户熟悉用于创建和将信息输入数据库的基本SQL命令。
第5章研究MySQL所支持的各种数据类型,并且探讨了如何用它们来增强表的一致性和完整性。
第6章介绍MySQL的算术运算、逻辑运算、比较运算和位运算,并且演示了它们怎样用于执行计算、比较和转换。
第7章讲述MySQL的大量内置函数,向读者展示了如何用最少的时间和精力来允许MySQL开发者执行从数据处理到口令加密等一系列操作。
第8章深入讨论MySQL用来存储数据的数据库和表的结构,并且解释了用来创建、修改和删除数据库、表和索引的SQL命令。本章的核心是讨论MySQL强大的CREATE TABLE命令,它提供了表创建过程的适度控制,探讨了对MySQL相对比较新的外键和全文索引。
第9章继续前一章,解释了怎样把记录插入到现有的MySQL数据库中。本章的第一部分论述了INSERT,UPDATE和DELETE命令,举例说明了怎样使用它们来处理数据库记录,并且阐明了MySQL特有的关于标准命令句法的某些问题;第二部分深入研究了SELECT语句,展示了如何使用它来创建数据库中记录的过滤子集;排序、分组和计算记录;使用会话变量;用多种不同的格式输入和输出数据等功能。
第10章讲述多表查询,展示了表之间的关系如何以不同的方式连接记录,以生成更有用的报表。本章论述了各种类型的连接,并且演示了它们在许多不同情况下的用法。
第11章讲述如何在查询里嵌套查询,以求更高级的查询运算,这是MySQL 4.1新引入的特性。
第12章研究MySQL 4.x的另一个非常强大的新特性:把一系列SQL语句分组成单个单元并且原子性地执行它们,或在出错的事件中撤销全部改动的能力。
第三部分论述在管理和维护一个MySQL RDBMS时要做的工作,包括像数据库备份和修复、安全性、访问控制、活动日志、服务器优化和故障排除这样的主题。
第13章分析了MySQL数据库管理员的作用,解释了像启动和关闭服务器、修改默认的服务器配置和检查MySQL日志文件这样的常规任务。
第14章讲述MySQL的安全和权限系统,探讨了用户账号和口令的管理(包括忘记了MySQL超级用户口令的解决办法)。
第15章提供了关于如何备份和恢复一个MySQL数据库,以及如何使用MySQL提供的功能从一个被破坏的数据库中恢复数据的信息和指导。
第16章提供了让MySQL服务器性能尽量达到最大的技巧和窍门,包括关于优化查询达到快速执行,修改高速缓冲存储器和缓冲器设置以达到迅速响应,以及使用特殊的运行时间参数以求更有效的资源利用等方面的信息。
第17章论述MySQL的另一个更有趣和强大的特性:自动复制跨越不同主机的数据库的能力。
第四部分主要针对开发者,它论述了MySQL API,一套建立自定义数据驱动的MySQL应用程序的功能全面而强大的工具。本部分包括实例和C,Perl,PHP API源代码。
第18章通过一系列API揭示了MySQL内部结构的情况和基本原理,对各种API的性能提供了简要的描述。其目的是帮助开发者选择适合他们的特殊要求的API。本章还对不同API之间相互比较的优点进行了论述。
第19章讨论如何使用MySQL发布版本包含的C库API编写MySQL客户应用程序。现实的例子包括一个交互式命令行SQL客户机和一个支持数据输入和简单报表生成功能的交互式开支追踪程序。
第20章讨论Perl DBI,特别介绍了MySQL驱动程序和可以通过Perl脚本连接MySQL数据库的DBI方法。在这里的现实应用软件是一个基于CGI的线索评论系统,通过一个标准网络浏览器可以访问它并且适合在内容丰富的网站上使用。
第21章主要围绕PHP进行论述,它是MySQL所包含的支持数据库Web应用程序的一种流行的脚本语言。此外还详细论述了相关的PHP函数。本章通过适用于任何网络浏览器的一个数据库驱动的书签应用程序,演示了MySQL与PHP组合的现实可用性。
本书使用约定
本书使用几个约定来突出特别的建议:
提示:使MySQL更好地为我们服务的简便方法。
注释:了解MySQL和其他程序工作的方式。
警告:需特别注意的地方,从而可使读者少走弯路。
当提到相关的材料时,通常会给出包含希望阅读到的信息的章节编号。
在本书的代码清单中,用粗体字突出的句子是在提示符下输入的命令。例如在下面的清单中:
粗体字行是用户要在MySQL命令提示符下输入的查询。可以使用这个例子作为一个向导来试验本书中的各种实例。
补 充 资 料
这是补充资料的版式。补充资料被设置成有点远离正常文本,它包括与当前主题相关的信息,但是不一定必须符合信息的流向。
相关网站
学习MySQL的最好的方法是理论和实践相结合。要达到这个目标,可以在MySQL相关网站http://www.mysql-tcr.com/上找到本书用于创建很多实例数据库的SQL代码,并且演示了本书第四部分中介绍的各种应用程序和脚本的源代码。当你访问这个网站时,可以顺便访问一下MySQL讨论论坛,联络其他MySQL用户和社区,以共享我们在MySQL使用和管理上的经验。
作者Vikram Vaswani是MySQL和其他许多开放源代码技术方面的专家。在写这本书的时候,Vaswani积极地与MySQL数据库开发组合作,以保证这本书在技术上的正确性,保证所涉及的主题中没有遗漏重要的知识点。
本书采取了一个全面的方法:涵盖了MySQL的主要特性以及诸如复制和各种API接口编程之类的高级主题。它还为理解关系模型提供了坚实的基础,全面涵盖了ACID事务和对关系数据库不够了解的人所要掌握的基本概念。
本书还涉及了熟悉Oracle或其他数据库系统的用户和管理员所需要的基本知识。体验过MySQL的人,对熟悉的主题会找到新的视角,从而更深入洞察MySQL的世界,提高他们现有的知识和经验。
在读者使用MySQL时,希望本书是一个颇有价值的资源。
Michael "Monty" Widenius
MySQL AB公司首席技术官
芬兰·赫尔辛基
关 于 作 者
Vikram Vaswani是Melonfire公司(http://www.melonfire.com/)的创始人和CEO,该公司专门从事软件咨询、内容创新和内容企业联合组织化服务。Vaswani是开放源代码运动的热情支持者,他通过http://www.melonfire.com/community/columns/trog/上的每周专栏,经常把开放源代码技术(包括Perl,Python,PHP,MySQL以及Linux)方面的文章和指南贡献给整个MySQL社区。他最近的著作是“XML and PHP”(http://www.xmlphp.com/)。
Vaswani在IT界有8年多的工作经验,其中有6年时间是作为用户、管理员和应用程序开发者与MySQL打交道。他在各种环境中部署过MySQL,包括企业内部网、高流量Internet网站和要求严格的瘦客户机应用环境,这些都是创作本书时非常有用的经验!作为软件顾问,他仍然是一个有份量的MySQL倡导者。
当不在Melonfire的一个高度戒备的会议室里策划控制世界时,Vaswani通过阅读、睡觉、看老电影、玩游戏、摆弄那些不断增多的电动小玩意收藏品来消遣自己,顺便会留意那些不友好的代理商。在http://www.mysql-tcr.com/上可以知道关于他的更多信息,在这里还可以下载示例代码,与其他在线的MySQL爱好者交流。
致 谢
在紧张的交稿期限和非同寻常的环境下,经过长长的一年多的时间,终于写成了本书。幸运的是,在整个过程中,我得到了许多人无法估量的帮助,这本书的字里行间都凝聚着他们的汗水。
首先要感谢我的家人。在写这本书的时候,是他们为我提供了安静的工作地点,并且容忍了我随意的工作时间(甚至古怪的行为)。他们的宽容是显著的,非常感谢!
万分感谢Harish Kamath,是他把相当多的SQL经验和知识带给了技术编辑的过程,他对本书第11章做出了贡献,并对我的闲聊电话和电子邮件总是非常有耐心。在本书的结构成型和确保尽可能内容全面上,他的想法和观点是很重要的。还要感谢Claude Seidman和Efren Estevez,他们分别对第2章、第15章、第16章和第17章做出了贡献。
在此必须提到McGraw-Hill/Osborne的优秀团队——高级策划编辑Christopher Johnson,采购协调员Athena Honore,项目编辑Jenn Tust,Elizabeth Seymour和Monika Faltiss(在出书过程中,他自始至终指导了本书)。还要感谢技术编辑Sasha Pachev,Jay Powers,Brian Kaney和Arjen Lentz,他们对技术上的编辑做出了贡献。还要特别致谢MySQL AB公司和它的富有献身精神的志愿者和开发者团队,是他们创建并不断增强了一个真正优秀的软件。
最后,在创作本书的整个过程中,我都比平常享受着更多的快乐,这应当归功于:Lawrence Block,Bryan Adams,the Stones,MAD杂志,Scott Adams,Gary Larson,MTV,Kylie Minogue,Buffy,Farah Malegam,MySQL邮件列表,Stephen King,John le Carre,Subway,Barry White,the Kamaths,Apple,Robert Crais,Robert B.Parker,Baz Luhrmann,Anna Kournikova,Swatch,Ling's Pavilion,Tonka,HBO,Ferrari,Mark Twain,Tim Burton,Friends的全部列表,John Sandford,Tube,Dido,Google.com,The Matrix杂志,Alfred Hitchcock,Bruno D'Costa,Woody Allen,Palm,Michael Schumacher,Mambo's和Tito's,Kalindi Mehta,Humphrey Bogart,Library酒吧,Amazon.com,U2,The Three Stooges,Oscar Wilde,Punch,Harry Potter,Scott Turow,Slackware Linux,Calvin和Hobbes,Blizzard Entertainment,Popeye和Olive,Dennis Lehane,Trattoria,Xerxes Antia,Dire Straits,Bruce Springsteen,Santana,David Mitchell,以及所有在国内和其他任何地方的我的朋友们。
MySQL完全手册
目 录
第一部分 安装
第1章 数据库导论
1.1 概述
1.2 小型数据库
1.3 小结
第2章 MySQL技术教程
2.1 MySQL体系结构综述
2.2 MySQL引擎
2.3 小结
第3章 MySQL安装和配置
3.1 获得MySQL
3.2 安装和配置MySQL
3.3 测试MySQL
3.4 安装之后的步骤
3.5 小结
第二部分 使用
第4章 SQL基础
4.1 SQL简史
4.2 SQL综述
4.3 (My)SQL教程
4.4 小结
第5章 MySQL数据类型
5.1 数据类型的要求和基本原理
5.2 MySQL数据类型
5.3 小结
第6章 MySQL运算符
6.1 算术运算符
6.2 比较运算符
6.3 逻辑运算符
6.4 位运算符
6.5 小结
第7章 MySQL函数
7.1 数学函数
7.2 聚合函数
7.3 字符串函数
7.4 日期和时间函数
7.5 加密函数
7.6 控制流函数
7.7 格式化函数
7.8 类型转化函数
7.9 系统信息函数
7.10 小结
第8章 使用数据库和表
8.1 创建数据库
8.2 选择需要的数据库
8.3 删除数据库
8.4 创建表
8.5 复制表
8.6 修改表
8.7 删除表
8.8 获得数据库、表、字段和索引的信息
8.9 小结
第9章 使用数据
9.1 插入、更新和删除记录
9.2 检索记录
9.3 复制、导入和导出记录
9.4 小结
第10章 连接
10.1 什么是连接
10.2 连接的类型
10.3 小结
第11章 子查询
第12章 事务处理
第三部分 管理
第13章 管理与配置
第14章 安全、访问控制和权限
第15章 维护、备份和恢复
第16章 性能优化
第17章 MySQL复制
第四部分 开发
第18章 MySQL API
第19章 MySQL与C
第20章 MySQL与Perl
第21章 MySQL与PHP