本文描述了 MySQL,一种利用第三方数据库研发电子贸易和其他复杂、动态网站的有效工具。MySQL 是一种快速、多线程和全功能的 SQL 服务器。除了描述 MySQL 系统的基本体系结构以外,本文还提供了以 Tcl 和 C 编写的简单示例,帮助您研发支持数据库的 Web 应用。

一个必须存储或访问大量信息的应用程式能够从使用第三方数据库产品中受益匪浅。在对信息的访问必须在程式的多个实例上进行时更是如此。基于 Web 的应用(包括电子贸易)就是他的良好例证。

为什么使用单独数据库?

Web 服务器必须使其处理脚本有办法来存储有关供其以后访问的状态信息。尽管有可能使用比较原始一些的方法 -- 例如转储到文本文档或研发自制的迷您数据库 -- 但只有成熟的数据库应用才能提供更为复杂的 Web 应用所需的任何服务。因为有一些免费获得的软件包可用于该目的,所以编写定制的特定于应用的数据库引擎并无太大好处。 另外,使用第三方数据库还使 Web 研发者不必投入到研发和维护数据库的任务中。

MySQL 数据库

通过使用脚本语言和编译型系统语言(例如 C),将数据库集成到 Linux 应用就可能相当容易。可免费获得的 MySQL(在 GNU Public License 下发行)数据库提供了一系列复杂的 SQL 功能,并易于集成到应用中。MySQL 是快速、多线程的,并支持 ANSI 和 ODBC SQL 标准。加上第三方软件,MySQL 就支持用于 事务处理 应用的事务安全的表。

什么是事务处理?

事务是需要以原子方式执行的对数据库所做的一系列更改。他们要么必须全部执行,要么一个都不执行。 例如,在 Web 上销售产品时任何必需的数据库更改组成一个事务。 数据库需要同时减去客户帐户余额和产品库存,否则失败并且一个操作都不执行。

无论服务器出于何种原因发生崩溃都不应该引起事务被部分执行。例如帐单多算、产品没有交付,或库存不实等都有可能是部分完成的事务的结果。

支持事务处理的数据库能够将一组数据库代码封装在一个事务中,在事务执行期间的任何失败会让数据库回滚到事务开始之前的状态。

这是通过维护任何数据库操作的日志,连同其原始状态表的副本来实现的,在失败后下一次重新启动服务器时允许回滚操作。 这种时间和空间上的开销是事务安全数据库系统所必需的一种折衷。

单一 MySQL 服务器控制着一系列数据库,他们都能够通过服务器以类似方式来访问。 每个数据库实际上都是一组任意数量的表,概念和其他 SQL 数据库的用户类似。每个表都由带类型的数据列组成。 数据能够是整数、实数值、字符串或其他类型,包括原始二进制流。表中的每一行都是存储在数据库中的一个记录。

MySQL 被设计和构造成客户机/服务器。 服务器 mysqld能够在能从因特网访问到的任何机器上运行(最好和 Web 服务器在同一台或最接近的一台机器上,以确保合理的响应时间)。 MySQL 客户机使用请求来和 MySQL 服务器联系,修改或查询服务器所拥有的数据库。 在支持数据库的 Web 应用程式中,数据库客户机是 Web 服务器或由 Web 服务器产生的 CGI 脚本。 这些客户机能够用高级脚本语言或低级系统语言编写,只要存在这种语言的数据库 API 即可。在 Linux 中,大多数脚本语言是以 C 实现的,因为存在 MySQL C API,所以要将 MySQL 支持添加到任何现有的脚本语言或工具应该很容易。绝大部分脚本语言已完成了这一步。

MySQL API

MySQL API 可用于各种语言,包括几乎任何编写网站后端所实际使用的语言。 使用这些 API,我们能够构建由 Web 服务器控制的 MySQL 客户机。

API(用于数据库访问)以基于连接的模式工作。客户机必须做的第一件事是打开和 MySQL 服务器的连接。这包括适当地使用服务器认识的用户名和口令来对连接进行身份认证。建立了连接后,服务器选择要使用的特定数据库。确定了初始化后,客户机应用程式(就我们来说是服务器方 CGI 脚本)就能自由地和数据库以两种方式中的一种进行交互:能够运行常规 SQL 命令,包括添加和删除表,连同向他们添加记录;也能够对返回结果的数据库运行查询。查询生成一组和查询匹配的记录,然后,客户机能够逐一访问记录,直到查看完任何记录,或客户机取消暂挂的记录检索。一旦脚本完成了对数据库的操作后,和服务器的连接就被关闭。

要构建集成数据库访问的网站,需要编写 CGI 脚本来根据数据库状态生成动态结果。Web 服务器启动 CGI 脚本,然后将适当格式化的 HTML 输出到他们的标准输出流中。Web 服务器捕获到 HTML 后将他发送回客户机,如同请求是对静态 HTML 页面进行的那样。 在生成 HTML 的过程中,脚本能够修改数据库,也能够查询并将结果合并到他们的输出中。

作为简单解释上述过程的一个示例,下面的代码(以 C 和 Tcl 编写)查询一个包含某公司供销售的产品清单的数据库。 这绝没有使用两种语言 MySQL API 的任何特性,但提供了快速、简易扩展的示例,能够对数据库内容执行任何 SQL 命令。 在该例中,脚本显示了低于特定价格的任何产品。在实践中,用户可能在 Web 浏览器中输入该价格,然后将他发给服务器。 我们省去了从环境变量中进行读取来确定 HTML 表单值的细节,因为他和不支持数据库的 CGI 脚本中执行的情况没有什么差别。 为清楚起见,我们假设事先配置了特定一些参数(例如要查询的价格)。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!