电脑技术学习

Mysql入门系列:MySQL程序设计介绍

dn001

  在这部分中,我们将讨论编写自己的访问MySQL数据库的程序所需要知道的内容。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 这样简单,也可能更复杂。考虑下面的报告:

  这个报告包括几个特定的元素:

  定制标题。

   在State 列中重复值的抑制以便只在更改时才将这些值打印出来。

  小计和总计的计算。

  数字格式,如9 4 3 8 4 . 2 4,打印为美元数量为$ 9 4 , 3 8 4 . 2 4。对于一些任务,甚至可能不需要任何输出。您可能正在对计算向后插入到另一个数据库表中的结果进行简单地检索信息。除了用户运行这个查询以外,甚至可能还想将这个结果输出到其他地方。例如,如果正在提取姓名和电子邮件地址以自动地填入为批量电子邮件生成信件格式的过程中,则程序产生输出。但是该输出由邮件接受者的信息组成,而没有运行程序人员的信息。

  可以在SQL自身施加的约束条件的环境下工作。SQL 不是一种带有条件选择、循环和子例程的流程控制结构的过程语言。SQL 脚本包括一组从开始到结束一次一个的可执行语句,具有最低限度的错误检查。

  如果在批处理模式中使用mysql执行SQL 查询的一个文件,则mysql在出现第一个错误后退出,或者,如果指定--force 选项,则不管出现多少错误,都不加选择地执行所有查询。程序可以围绕语句提供流程控制,以便可以有选择地适应查询的成功或失败。可以根据另一个查询的成功或失败来执行一个查询,或根据前一个查询的结果来决定下一步要做的事情。SQL 具有非常有限的语句间的连续性,这点也被带到mysql中。使用一个查询的结果,并将它们应用于另一个查询中,或将多个查询结果联系在一起是困难的。L A S T _ INSERT _ID() 可用于获取由前一个语句最新生成的AUTO_INCREMENT 值,仅仅是关于它的。