MySQL有一组实用程序。例如,mysqldump 导出表的上下文和结构定义,mysqlimport将数据文件加载到表中, mysqladmin 实现管理w操作,mysql可以使用户与服务器交互来执行任意的查询。每个标准的MySQL实用程序都倾向于小巧,重点放在程序可完成特定的、有限的功能。即使mysql也是如此,从感觉上说,mysql比其他实用程序更灵活,因此可以用它来执行任何数量的各种查询,即它就是为允许向服务器直接发布SQL 查询,并可查看查询结果这一单一目的而设计的。
MySQL客户机这种有限的特性并不是缺点,而是特意设计的。程序是具有通用目的的实用程序;它们并不试图预料您所想做的所有可能的需要。MySQL的开发者们不赞成编写大型的、臃肿的程序来试图做可能想去做的每件事情(而且这样做的结果将使程序中包括大量的您根本不关心的事情的代码)。然而,有时有些应用确实有常规客户机的能力所无法处理的需求。为了处理这些情况,MySQL提供一个客户机编程库。这允许您编写自己的程序,满足您的应用程序可能具有的任何特定需求。通过允许您对MySQL服务器的访问,客户机的开放程度只受您自己想象力的限制了。
编写自己的程序可以获取如何特殊的能力呢?让我们比较一下mysql客户机和其没有附加代码的接口对MySQL服务器的访问:
可以定制输入处理
用mysql可以输入原始的SQL 语句。用自己的程序,可以为用户提供使用起来更直观、更容易的输入方法。用程序可使用户不必知道SQL—甚至不必知道在完成的任务中数据库承担的角色。
输入信息的采集可能是像命令行风格的提示和值读取这样基本的方式,或者可能是使用屏幕管理程序包(如curses 或S - L a n g)、使用Tcl/Tk 的X 窗口或Web 浏览器格式实现的基于屏幕输入那样复杂的方式。
对大多数人来说,通过填写一定的格式来指定搜索参数的形式比通过发布SELECT语句更容易。例如,一位房地产经纪人,要寻找一定价格范围、风格或位置的房屋,只要将查寻参数输入到表格中,就可以最小的代价得到符合条件的内容。输入新记录或更新已有记录也类似地考虑这种应用。在数据输入部门的键盘操作员应该不需要知道像INSERT、REPLACE 或UPDATE 这样的SQL 语法。
在最终用户和MySQL服务器之间提出输入采集层的另一个原因是可以校验用户提供的输入。例如,可以检查数据,确认它们是符合MySQL要求的格式,或可以要求填写特定的区域。
可以定制输出
mysql的输出基本上是无格式的;可以选择以制表符为分隔符或以表格形式输出。如果想要使输出结果看起来比较好,则必须自己对它进行格式化。这些需求可能像打印“Missing”而不是NULL 这样简单,也可能更复杂。考虑下面的报告:
5、可以将MySQL集成到任何应用程序中。许多程序都利用数据库的能力提供信息。通过发布一个快速查询,应用程序可以校验消费者号或检查一项条目是否在产品清单中。假设一个客户要寻找某些作者的所有书,则Web 应用程序可以在数据库中查找它们,然后将结果显示在该客户的浏览器上。
通过使用调用带有包含SQL 语句的输入文件的mysql的外壳脚本( shell script),可以实现一种初步的“集成”,然后,再使用其他UNIX实用程序加工这些输出。但是这可能变得很难看,特别是当任务变得更复杂时。当应用程序不断增长成为杂乱的修补工作时,它也可能产生一种“在工作,但觉得有错误”的感觉。此外,运行其他命令的外壳脚本的创建过程的开销可能超过您的预想。但它可能更有效率地与MySQL服务器直接交互,当在应用程序执行的每个阶段需要它的时候,都可以精确地提取想要的信息。针对我们在第1章“MySQL和SQL 介绍”中安装的样例数据库samp_db,我们已经列举了若干需要自己编写与MySQL服务器交互的程序的目标。这些目标中的一些显示在下面的列表中:
■ 为打印而格式化Historical League 目录。