本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、API应用指南,最大限度地帮助读者更快地学习和掌握MySQL数据库系统的设计和使用。本书覆盖了MySQL 5.0,讨论了新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。\r\n 本书是MySQL数据库管理员和开发人员的必备参考书。
第一部分 入门\r\n 第1章 什么是MySQL\r\n 1.1 什么是数据库\r\n 1.2 MySQL\r\n 1.3 MySQL的不足\r\n 1.4 MySQL的版本编号\r\n 1.5 MySQL的许可证\r\n 1.6 MySQL软件的替代品\r\n 1.7 小结\r\n 第2章 测试环境\r\n 2.1 是Windows还是UNIX/Linux\r\n 2.2 在Windows系统上安装MySQL和相关软件\r\n 2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件\r\n 2.4 在Red Hat Enterprise Linux 4系统上安装MySQL和相关软件\r\n 2.5 编译MySQL软件的开发者版本(Linux)\r\n 2.6 配置Apache\r\n 2.7 配置PHP\r\n 2.8 配置MySQL\r\n 第3章 初级案例研究:MySQL+PHP\r\n 3.1 概述\r\n 3.2 数据库的开发\r\n 3.3 调查问卷\r\n 3.4 问卷调查结果的处理和显示\r\n 3.5 改进意见\r\n第二部分 管理工具和用户操作界面\r\n 第4章 mysql、mysqladmin和mysqldump\r\n 4.1 mysql\r\n 4.2 mysqladmin\r\n 4.3 mysqldump\r\n 第5章 MySQL Administrator和MySQL Query Browser\r\n 5.1 安装\r\n 5.2 与MySQL服务器建立连接\r\n 5.3 MySQL Administrator\r\n 5.4 MySQL Query Browser\r\n 第6章 phpMyAdmin\r\n 6.1 phpMyAdmin的安装与配置\r\n 6.2 用户管理,保护MySQL\r\n 6.3 创建和编辑数据库\r\n 6.4 查看、插入和编辑数据\r\n 6.5 执行SQL命令\r\n 6.6 导入和导出\r\n 6.7 服务器管理\r\n 6.8 辅助功能\r\n 第7章 Microsoft Office和OpenOffice/StarOffice\r\n 7.1 安装Connector/ODBC\r\n 7.2 Microsoft Access\r\n 7.3 Microsoft Excel\r\n 7.4 安装Connector/J\r\n 7.5 OpenOffice/StarOffice Base\r\n 7.6 OpenOffice/StarOffice的Data Source视图\r\n第三部分 基础知识\r\n 第8章 数据库设计概论\r\n 8.1 参考读物\r\n 8.2 数据表类型\r\n 8.3 MySQL数据类型\r\n 8.4 数据库设计技巧\r\n 8.5 规范化\r\n 8.6 层次关系的处理\r\n 8.7 关系\r\n 8.8 主键和外键\r\n 8.9 索引\r\n 8.10 视图\r\n 8.11 示例数据库mylibrary(图书管理)\r\n 8.12 示例数据库myforum(网上论坛)\r\n 8.13 示例数据库exceptions(用于特殊情况的测试)\r\n 第9章 SQL语言入门\r\n 9.1 简介\r\n 9.2 简单查询(SELECT)\r\n 9.3 对查询结果进行排序(ORDER BY)\r\n 9.4 筛选数据记录(WHERE,HAVING)\r\n 9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)\r\n 9.6 合并查询结果(UNION)\r\n 9.7 分组查询,统计函数(GROUP BY)\r\n 9.8 修改数据(INSERT、UPDATE和DELETE)\r\n 9.9 创建数据表、数据库和索引\r\n 第10章 SQL解决方案\r\n 10.1 字符串\r\n 10.2 日期和时间\r\n 10.3 ENUM和SET数据类型\r\n 10.4 变量与条件表达式(IF、CASE)\r\n 10.5 在数据表间复制数据\r\n 10.6 统计报表\r\n 10.7 子查询\r\n 10.8 保证数据的一致性\r\n 10.9 找出冗余的数据记录\r\n 10.10 数据表设计方案的改进\r\n 10.11 对前n条或后n条记录进行处理\r\n 10.12 以随机方式选择数据记录\r\n 10.13 全文索引\r\n 10.14 锁定\r\n 10.15 事务\r\n 第11章 访问权限与信息安全\r\n 11.1 简介\r\n 11.2 急救\r\n 11.3 访问控制机制的内部工作原理\r\n 11.4 访问权限的设置工具\r\n 11.5 MySQL 4.1版本开始的安全密码验证\r\n 11.6 建立连接的问题\r\n 11.7 系统安全性\r\n 第12章 GIS函数\r\n 12.1 GIS数据格式\r\n 12.2 MySQL的GIS实现\r\n 12.3 SQL示例(冰川数据库)\r\n 12.4 SQL示例(opengeodb数据库)\r\n 第13章 存储过程和触发器\r\n 13.1 为什么要使用存储过程和触发器\r\n 13.2 初识SP\r\n 13.3 SP的实现\r\n 13.4 SP的管理\r\n 13.5 SP的语法和语言元素\r\n 13.6 SP应用示例\r\n 13.7 触发器\r\n 第14章 管理与服务器配置\r\n 14.1 基础知识\r\n 14.2 备份\r\n 14.3 数据库的迁移\r\n 14.4 导出和导入文本文件\r\n 14.5 日志\r\n 14.6 镜像机制\r\n 14.7 管理MyISAM数据表\r\n 14.8 InnoDB数据表的管理\r\n 14.9 MySQL服务器的优化\r\n 14.10 ISP数据库管理\r\n第四部分 程序设计\r\n 第15章 PHP\r\n 15.1 mysql功能模块\r\n 15.2 mysqli的类、方法和属性\r\n 15.3 把数据库功能打包为一个类\r\n 15.4 把SELECT查询结果显示为一个表格\r\n 15.5 字符串、日期、时间、BLOB和NULL\r\n 15.6 向关联数据表插入新数据记录\r\n 15.7 处理来自HTML表单的输入数据\r\n 15.8 分页显示查询结果\r\n 15.9 处理层次化数据\r\n 15.10 速度优化\r\n 15.11 Unicode\r\n 15.12 二进制数据(BLOB)和图像\r\n 15.13 存储过程\r\n 15.14 SP Administrator\r\n 第16章 Perl\r\n 16.1 编程技巧\r\n 16.2 示例:删除无效的数据记录(mylibrary)\r\n 16.3 CGI示例:图书管理(mylibrary)\r\n 16.4 CGI Unicode示例\r\n 第17章 Java(JDBC和Connector/J)\r\n 17.1 基础知识\r\n 17.2 程序设计技巧\r\n 第18章 C语言\r\n 18.1 MySQL C API(libmysqlclient)\r\n 18.2 Hello,World\r\n 18.3 与MySQL服务器建立连接\r\n 18.4 执行SQL命令\r\n 18.5 处理二进制数据和特殊字符\r\n 18.6 出错处理\r\n 第19章 Visual Basic 6/VBA\r\n 19.1 基础知识和术语\r\n 19.2 Connector/ODBC选项\r\n 19.3 ADO程序设计与Visual Basic 6/VBA\r\n 19.4 与MySQL服务器建立连接\r\n 19.5 转换器:从Microsoft SQL Server到MySQL\r\n 19.6 VBMySQLDirect\r\n 第20章 Visual Basic .NET和C#\r\n 20.1 ADO .NET与MySQL之间的通信\r\n 20.2 编程技巧\r\n 20.3 示例:把新图书记录存入mylibrary数据库\r\n 20.4 示例:把图像文件存入和读出一个BLOB数据列\r\n第五部分 参考资料\r\n 第21章 SQL语法指南\r\n 21.1 语法\r\n 21.2 操作符\r\n 21.3 变量和常数\r\n 21.4 MySQL数据类型\r\n 21.5 SQL命令汇总表(按功能分类)\r\n 21.6 SQL命令指南(按字母表顺序排列)\r\n 21.7 SQL函数指南\r\n 21.8 GIS数据类型与GIS函数\r\n 21.9 与存储过程和触发器有关的语言元素\r\n 第22章 MySQL工具和选项\r\n 22.1 概述\r\n 22.2 通用选项和配置文件\r\n 22.3 mysqld程序(服务器)\r\n 22.4 mysqld_safe脚本(启动MySQL服务器)\r\n 22.5 mysql_install_db脚本(安装mysql数据库)\r\n 22.6 mysql_fix_privileges脚本(更新mysql数据库)\r\n 22.7 mysql_fix_extensions脚本(重命名MyISAM文件)\r\n 22.8 mysql程序(SQL命令解释器)\r\n 22.9 mysqladmin程序(日常管理)\r\n 22.10 mysqldump程序(数据的备份/导出)\r\n 22.11 mysqlimport程序(文本导入、批量导入)\r\n 22.12 mysqlshow程序(查看信息)\r\n 22.13 myisamchk程序(修复MyISAM文件)\r\n 22.14 myisampack程序(压缩MyISAM文件)\r\n 第23章 MySQL API应用指南\r\n 23.1 PHP API(mysql接口)\r\n 23.2 PHP API(mysqli接口)\r\n 23.3 Perl DBI\r\n 23.4 JDBC(Connector/J)\r\n 23.5 ADO .NET(Connector/Net)\r\n 23.6 C API\r\n第六部分 附录\r\n 附录A 术语解释\r\n 附录B 本书的配套示例文件\r\n 附录C 参考书目
译 者 序
MySQL是使用最广泛的开源数据库系统,它正在数据库市场上重演Linux在操作系统领域逐步取得成功的故事。PHP或Perl语言与MySQL相结合的数据库系统解决方案正被越来越多的网站所采用,其中又以LAMP模式(“Linux + Apache + MySQL + Perl或PHP”组合方式)最为流行。MySQL的突出优点包括:
适用面广。可以在Windows、Linux、Mac OS X及各种UNIX操作系统上运行,可以用C、C++、C#、Java、Perl、PHP、Python、Visual Basic和Visual Basic.NET等多种程序设计语言来开发MySQL应用程序。在Linux领域里,以MySQL作为后端数据库引擎的应用项目越来越多:它可以帮助人们更有效率地管理各种日志数据以及电子邮件、MP3文件、地址名单之类的数据。在Windows领域里,借助于ODBC接口,MySQL也能完成类似的任务(在许多场合下,MySQL提供了更好的技术基础)。
性能优异,运行稳定。MySQL是一种功能非常强大的关系数据库系统,它的安全性和稳定性足以满足许多应用项目的要求。美国航空航天局、美国洛斯•阿拉莫斯国家实验室(数据量高达7TB)、Yahoo!、Lycos、索尼、铃木、维基百科等大公司和大机构都采用了MySQL来建立它们的后端数据库。从这个意义上讲,选择MySQL就等于是让自己与这些优秀的公司站在了同一条起跑线上。此外,MySQL对硬件性能的要求不那么苛刻,这一点对小公司或个人用户来说特别有优势。
性价比高。MySQL是一个开源软件产品,采用GPL许可证发行,所以绝大多数MySQL应用项目都可以免费获得和使用MySQL软件。如果用户的MySQL项目不符合GPL许可证的有关规定,只须支付一些合理的费用就可以获得商业许可证和各种可选的技术支持服务合同。
技术支持丰富而且易于获得。因特网上有着丰富的MySQL资源。
与其他的开源数据库系统相比,MySQL不仅在性能指标方面高出一截,在应用范围和实际装机容量方面也远远领先于竞争对手。MySQL比其他数据库系统接受过更全面的测试,有着更齐全的文档,有MySQL经验的开发人员也相对更多一些。不过,MySQL目前还无法在所有的方面与一些老牌的商业化数据库系统抗衡。万一用户的项目必须用到某些MySQL尚不支持的功能,请在项目的前期可行性研究阶段做出判断和取舍。
本书是一部MySQL领域的名著,新版在第2版的基础上进行了大量的改写。大部分改动是根据MySQL软件从4.1版到5.0版的变化而做出的。围绕着MySQL相关领域做出的改动也有不少,其中包括新的程序设计接口(如PHP 5里的mysqli接口)和新的系统管理工具。本书从面向应用和面向示例两方面对MySQL数据库系统进行了全面系统的介绍,读者无须具备SQL编程或数据库设计经验,而书中的示例数据库和示例程序能够帮助那些打算自行开发一个数据库应用软件的读者打下坚实的基础。不过,因为本书没有足够的篇幅从入门开始对每一个论题进行探讨,所以书中有些内容(尤其是与编程有关的内容)需要读者具备相应的基础知识才能从中获得最大收益。
与任何一种现代数据库产品一样,MySQL的实际应用还需要涉及硬件设备、操作系统、网络与通信等许多方面。这些领域每天都有新的技术和改进诞生。
本书主要由杨晓云、王建桥、杨涛、李东梅翻译,参加翻译工作的还有范精明、许玉新、俞渭明、韩兰、张玉亭、李菘、张雁东、李京山、张立和、张勇、韩文光、孙殿刚、韩东升、陈丽芬、张异宝、卫健、李江卫、丁文学、张斌和汪艳华等同志。
因为译者水平有限,所以书中可能会有一些错误和疏漏,希望能够得到读者的谅解和指正。
Michael Kofler在奥地利格拉茨技术大学获得计算机博士学位。他写了很多非常成功的计算机图书,内容涉及Visual Basic、Linux、Mathematica和Maple等多种程序设计语言和软件。Kofle还是Definitive Guide to Excel VBA第2版的作者。
前 言
MySQL是使用最广泛的开源数据库系统,这主要有以下几个原因:
MySQL很快。
MySQL很稳定。
MySQL很容易学习。
MySQL可以在各种主流的操作系统(Windows、Linux、Mac OS X和各种UNIX版本)上运行。
MySQL应用软件可以用多种程序设计语言(如C、C++、C#、Java、Perl、PHP、Python、Visual Basic和Visual Basic.NET等)来编写。
网上有详尽的MySQL文档,与MySQL有关的书籍也非常多。
有许多应用项目都允许用户免费使用MySQL来开发(在遵守GPL许可证制度的前提下)。
虽然也有许多商业化的应用软件不受GPL许可证的约束,但只需支付一些合理的费用就可以获得商业许可证和各种可选的技术支持服务合同。
MySQL正在数据库市场上重演Linux在操作系统领域逐步取得成功的故事。PHP或Perl语言与MySQL相结合的数据库系统解决方案被越来越多的网站所采用。其中又以“Linux + Apache + MySQL + Perl或PHP”的组合方式最为流行,这种组合被人们称为LAMP模式。MySQL并不仅仅适用于小型网站,连Yahoo!、Slashdot和美国航空航天局等数据量非常大的公司和机构也在使用它。
本书内容
本书面向应用和面向示例对MySQL数据库系统进行了全面系统的介绍。读者无需具备SQL编程或数据库设计的经验。
本书的入门部分将从如何在运行Windows和Linux操作系统的计算机上安装MySQL、Apache、PHP和Perl等软件组件的具体步骤开始展开讨论。此外,还将介绍如何安装需要与MySQL配合使用的其他组件。在此基础上的第一个示例将向大家演示MySQL和PHP的基本用法。
本书的第二部分将对mysql、mysqladmin、mysqldump、MySQL Administrator、MySQL Query Browser和phpMyAdmin等几个最为重要的系统管理工具和用户操作界面进行介绍,最后一个程序特别适合使用Web浏览器以离线方式来完成各种系统管理工作的情况。在这一部分还将专门用一章的篇幅来讨论如何通过Microsoft Office、Sun StarOffice和OpenOffice访问MySQL数据库。
本书的第三部分为读者准备了大量有关数据库语言SQL、数据库系统的设计思路、存储过程、MySQL的访问控制系统和多种系统管理工作(如备份、日志和镜像等)的背景资料。
本书的第四部分将重点介绍PHP语言,其中有一章内容很长,读者可以学到许多程序设计方面的技巧。将通过一系列示例程序来演示如何利用mysql和mysqli(PHP 5里新增加的软件工具)程序提供的操作界面去完成各项系统管理任务;还将介绍其他几种程序设计语言,将在专门的章节里对Perl、Java、C、Visual Basic 6以及Visual Basic.NET和C#等语言进行讨论。
本书的主要内容将以参考资料篇(第五部分)作为结束,将对MySQL所支持的各种SQL命令、常见MySQL系统管理工具的功能选项及几种重要的程序设计语言(PHP、Perl、C、Java、ADO .NET)所提供的接口函数进行总结。
最后是附录,其内容涉及术语解释(附录A),对书里提到的各个示例文件的介绍(附录B,有关文件都可以从www.apress.com网站下载),以及帮助大家进一步掌握MySQL的参考读物和建议(附录C)。
我们相信,本书里的示例数据库和示例程序能够帮助那些打算自行开发一个数据库应用软件的读者打下一个坚实的基础。在这里,预祝大家能够从中获得乐趣和成功。
本书(第3版)新增内容
本书在第2版的基础上进行了大量的改写。大部分改动反映了MySQL服务器从4.1版到5.0版的变化。围绕着MySQL相关领域做出的改动也有不少,其中包括新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。最为重要的新增内容如下所示。
MySQL从4.1到5.0的变化
增加对Unicode和其他新字符集的支持(新增和改动之处详见书中各有关内容)。
视图(在第8章中新增了一个小节)。
INFORMATION_SCHEMA数据表(在第9章中新增了一个小节)。
子查询(在第10章中新增了一个小节)。
经过改进的密码验证机制和访问控制管理方面的新增权限(第11章)。
GIS函数(新增的第12章)。
存储过程和触发器(新增的第13章)。
对InnoDB数据表进行维护管理的新办法(在第14章中新增了一个小节)。
各种新的SQL命令、函数、数据类型(新增和改动之处详见书中各有关内容,第21章对它们进行了汇总)。
MySQL服务器和它的各种系统管理工具的新增功能选项(新增和改动之处详见书中各有关内容,第21章对它们进行了汇总)。
相关领域中的变化
MySQL Administrator和MySQL Query Browser(新增的第5章)。
phpMyAdmin工具中的许多新增功能(新增的第6章)。
OpenOffice / StarOffice中的数据库接口(在第7章中新增了一节)。
PHP 5里的mysqli工具,这是一个面向对象的接口(新增的第15章、第23章对它们进行了汇总)。
C-API中的新增函数(第18章、第23章对它们进行了汇总)。
新的ADO .NET驱动程序集Connector/Net(第20章、第23章对它们进行了汇总)。
本书没有涉及的内容
在本书的各有关章节里,分别讨论了如何运用PHP、Perl、C、Java和Visual Basic等多种程序设计语言编写MySQL应用软件的问题。那些章节里的内容是在读者对相应的程序设计语言已经比较熟悉的假设下展开的——原因很简单:本书没有足够的篇幅从入门开始对那么多种程序设计语言进行介绍。换句话说,读者只有在自己已经熟练掌握(比如PHP语言)的前提下才能从专门讨论PHP编程技巧的有关章节里获得最大的收益。
示例程序、源代码
书中所有示例程序的源代码都可以通过www.turingbook.com和www.apress.com网站下载。
在这本书里,读者会在一些比较长的示例程序清单的开头看到一个如下所示的注释行,它给出了该示例文件在上述网站上的文件名,比如:
出于节约篇幅的考虑,在书中有时只给出了整段程序代码中最精彩的片段。
软件版本问题
MySQL本身以及各种工具程序、程序设计语言和相关函数库的功能会随着它们各自的每一个新版本的出现而发生变化——这些变化每个星期都有可能发生。下面这份清单是笔者在编写这本书时使用的各种软件的版本明细(对这些软件名称的解释详见书中的适当位置)。
Apache:2.n版。
Connector/J:3.1.7版和3.2.0版。
Connector/ODBC(以前叫做MyODBC):3.51.11版。
gcc:3.3版。
Java:1.4.2版和1.5.0版。
Linux:本书中的MySQL工具和其他程序都已经在Windows和Linux环境下通过了测试。我们的Linux测试环境使用的是Red Hat Enterprise 4和SUSE Professional 9.2和9.3 beta发行版本。
Microsoft Office:Office 2000。
Microsoft Visual Basic、VBA、ADO:书中的Visual Basic程序是在Visual Basic 6、VBA 6和ADO 2.8环境下开发和测试的。
Microsoft Visual Basic .NET、C#、ADO.NET:与这几个方面有关的信息主要以Visual Studio 2005 beta版(即.NET Framework 2.0)为依据。
Microsoft Windows:Windows环境下的测试工作全都是在Windows XP SP2系统上完成的。从理论上讲,有关信息应该同样适用于Windows 2000和未来的Windows版本。
MySQL:5.0.3版。
OpenOffice:2.0 beta版。
Perl:5.8版。
PHP:5.0版和5.3版。
phpMyAdmin:2.6.1版。
印刷体例
SQL命令、SQL函数以及SQL、C、Java、PHP、Perl、Visual Basic等语言里的各种函数方法、类和关键字主要以斜体字表示(例如:SELECT、mysql_query)。
UNIX/Linux用户名也以斜体字表示(例如:root、mysql)。
菜单命令使用首字母大写字体表示(例如:File | Open)。
文件名和子目录名使用代码体表示(例如:/usr/local 或 C:\Windows)。
程序名和编程命令也以代码体表示(例如:mysql 或 cmd.
无封面