仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 781|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL编程:MySQL可用的API

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
越来越多的开发者将继续选择MySQL。Evans的总裁JohnAndrews表示,MySQL学习教程用户对MySQL和其他开源数据库的评价正在赶上甚至超过很多专有商业数据库软件。
5.1MySQL可用的API
为了便利使用程序的开辟,MySQL供应了用C编程言语编写的客户机库,它同意从任何C程序的外部会见MySQL数据库。客户机库完成使用程序编程接口(API),API界说客户机程序怎样创建和实行与服务器的通讯。
但是,利用C来编写MySQL程序其实不受限定。很多其他言语处置器自己也是由C编写的,或具有利用C库的才能,以是MySQL客户机库供应了这个办法,由此,MySQL对这些言语的束缚能够创建在CAPI的下面。这就为与MySQL服务器通讯而编写使用程序供应了很多选择。客户机程序的API是用Perl、PHP、Java、Python、C++、Tcl和其他一些言语编写的。有关最新的清单,请检察MySQL参考指南或MySQLWeb站点,由于偶然会增添用新言语编写的API。
每种言语束缚都界说本人的接口,出格是会见MySQL的划定规矩。这里没有充足的工夫来会商MySQL可以使用的每种API,我们只报告最盛行的三种:
■C客户机库API。这是MySQL的基础编程接口。
■Perl通用方针剧本言语的DBI(数据库接口)API。DBI是作为与其他模块在DBD(数据库驱动程序)级接口的Perl模块来完成的,每一个模块都供应对特定范例的数据库引擎的会见(固然,我们将会商的特定的DBD模块也供应对MySQL的撑持)。DBI对MySQL的最广泛用法是编写由命令行来挪用的自力的客户机,和试图由Web服务器挪用的剧本来供应Web对MySQL的会见。
■PHPAPI。PHP是一种剧本言语,它供应了在Web页中嵌进程序的一种便当的办法。在发送之前,如许的页面由PHP来处置,它同意这些剧本天生静态的内容,如在页面中包含MySQL查询的了局。“PHP”原始的意义是团体主页(PersonalHomePage),可是PHP的发展已远远凌驾它复杂的原始功效。PHPWeb站点如今利用的这个称号暗示“PHP:超文本预处置程序(HypertextPreprocessor)”,它像GNU(是GUN而不是UNIX)一样以一样的体例自我援用。
利用别人功效
当尺度的MySQL客户机不克不及满意必要时,您其实不老是必要编写本人的程序。其他一些人一向编写程序,而这些程序中有很多是可共享失掉的。请参阅附录I中的一些样例。只需找到几个就可以节俭您的很多事情。
以上这三种API都有专门章节具体申明。本章只供应对API对照的概述,用来讲明它们的基础特性,并给出对特定的使用程序大概选择某个而不是其他API的缘故原由。
固然,不用只思索某个API,应懂得每一个API,并用能够明智选择合适本人的API。在包含多少组件的年夜项目中,大概利用多个API,多种言语,这取决于每一个子义务合适哪种言语。
关于试图利用的任何一种API,假如必要失掉必须的软件,请参阅附录A。
5.1.1CAPI
CAPI用于编译C程序高低文情况外部。它是一种客户机库,供应可用来与MySQL服务器对话的最初级其余接口――具有创立与服务器通讯所需的才能。DBI和PHP的前身DBI的Perl前身是Mysqlperl模块Mysql.pm。这个模块不再被撑持,并且不该该用于新的MySQL的开辟。有一件事必要分明,Mysqlperl是依附于MySQL的,但DBI不是。假如编写MySQL的Perl使用程序,然后,决意想用别的一种数据库引擎来利用它们,则移植DBI剧本比Mysqlperl剧本更简单一些,由于它们很少依附于特定的数据库引擎。
假如猎取了会见MySQL的一段Perl剧本,并发明它是用Mysqlperl而不是DBI编写的,则仍旧可使用DBI。DBI包含了对Mysqlperl的仿真撑持,因而不必要安装两个程序包。PHP3的前身是PHP/FI2.0(FI代表“forminterpreter,即格局注释程序”)。像Mysqlperl一样,PHP/FI也是过期的,以是我们就不再进一步会商它了。
MySQLCAPI的劈头假如已有编写mSQLRDBMS程序的履历,那末将注重到MySQLCAPI相似于mSQL响应的CAPI。当MySQL的开辟者们入手下手完成他们的SQL引擎时,很多有效的共享有用程序可用于mSQL。要想消费最小的难度将那些mSQL有用程序移植为MySQL的
有用程序是大概的,可成心地将MySQLAPI计划为与mSQLAPI相似(MySQL乃至带有与mSQLAPI函数称号响应的MySQL称号的复杂的文本替换品的msql2mysql剧本。这个操纵绝对啰嗦,实践上也照应了很多触及为利用MySQL而转换mSQL程序的事情)。
MySQL分发包供应的C客户机是基于这个API的。C客户机库也作为MySQL对其他言语束缚的基本来供应服务,但JavaAPI是一个破例。比方,经由过程毗连MySQLC客户机库代码(这个历程在附录A中经由过程DBI和PHP安装引导来举例申明),MySQL可用PerlDBI模块专有的MySQL驱动程序和PHP代码。
5.1.2PerlDBIAPIDBIAPI用于Perl剧本言语编写的使用程序的高低文情况外部。这类API在我们思索的这三种API布局中是最高的,由于它可与很多数据库事情,而同时在剧本中可疏忽很多特定命据库的细节。DBI经由利用两级布局的Perl模块来完成(请参阅-1):
■DBI(数据库接口)级。为客户机剧本供应接口。这个级别供应的是笼统接口,并非指特定命据库引擎。
■DBD(数据库驱动器)级。在这个级别由特定引擎的驱动程序来供应对各类数据库引擎的撑持。

MySQL对DBI的撑持情况由Msql-Mysql-modules分发包供应。这个模块在DBD级操纵。能够从分发包称号及-1平分辨它,一个驱动程序能够供应对一个以上的RDBMS的撑持。Msql-Mysql-Modules最后是为mSQL而编写的,厥后扩大到MySQL。这类影响相似于对mSQL和MySQL的CAPI。因为计划的MySQLCAPI相似于mSQLCAPI,以是将mSQLDBD(利用mSQLCAPI)扩大到对MySQL的利用很成心义。
DBI系统布局编写使用程序的作风绝对一般。当编写DBI剧本时,可以使用一组尺度的挪用。DBI级在DBD级挪用得当的驱动程序来处置哀求,关于想利用的特定命据库服务器通讯中包含的特定成绩,由驱动程序处置。DBD级传送从服务器前往的数据,备份到DBI级,使
数据呈现在使用程序中。数据的格局与数据库的数据来历分歧。
其了局失掉如许一个接口,该接口从使用程序的编写者的概念埋没了数据库引擎之间的差别,如许可以使用多种分歧的引擎――和驱动程序一样多。DBI经由过程同意以一致作风会见每一个数据库来供应分歧性客户接口以增添可移植性。
当翻开数据库时,呈现由剧本编写的数据库专有的界面。当创立毗连时,应指出利用哪一个驱动程序。比方,要想利用MySQL数据库,应如许毗连:

而要想利用Postgres或mSQL,应如许毗连:

毗连今后,对该驱动程序不必要再做任何做特别的援用。让DBI和该驱动程序办理数据库专有的细节。
不管怎样这都是实际成绩。但是,最少有两个要素与DBI剧本的可移植性冲突:
■在RDBMS引擎之间SQL的完成分歧,为一个引擎编写的SQL另外一个引擎基本不睬解是完整大概的。假如SQL相称通用,则剧本可在引擎之间作响应的移植。但假如SQL依附于引擎,则剧本也是如许。比方,假如利用MySQL指定的SHOWTABLES语句,则该剧本不克不及用其他数据库实行。
■DBD模块一般供应引擎专有范例的信息来同意剧本编写者利用特定命据库体系的特定功效。比方,MySQLDBD供应会见查询了局中列属性的办法,如每列的最年夜长度、列是不是是数值型的,等等。而这些属性在其他数据库中没有任何类似物。DBD专有的特征与可移植性相背,经由过程利用它们,将MySQL编写的剧本用于其他数据库体系是坚苦的(但是,在第7章中,您将发明,笔者绝不吃力地制止了由MySQLDBD供应的MySQL专有的布局。那是由于您应当晓得那些布局是甚么,以即可以决意本人是不是利用它们)。
只管存在数据库专有剧本的这两个要素,但以笼统体例供应数据库会见的DBI机制是完成可移植性的公道体例,只需您决意使用它几次便可。
5.1.3PHPAPI
像Perl一样,PHP也是一种剧本言语。但它与Perl分歧,PHP很少作为通用方针言语来计划,而是作为编写Web使用程序的一种言语。PHPAPI次要作为在Web页面中嵌进可实行剧本的一种办法来利用。这使Web的开辟者们很简单用静态天生高低文情况来编写页面。
当客户扫瞄器向Web服务器发送PHP页面的哀求时,PHP实行在该页面中它所发明的任何剧本,并用剧本的输入来交换它。该了局再送回扫瞄器。这就使扫瞄器中实践呈现的页面依据哀求的页面情况的分歧而有所分歧。比方,当在Web页面中嵌进上面冗长的PHP剧本时,它呈现所哀求页面的主机IP地点:

可使用剧本为会见者供应基于数据库高低文情况的最新信息。上面的样例申明可用于HistoricalLeagueWeb镜愕囊桓黾虻ソ疟尽8媒疟痉⒉家桓銮肭罄慈范ǖ鼻暗League的成员数量,并将该数量呈报给会见该站点的人(假如呈现毛病,则该剧本不呈报任何数量):

DBI和DBD的寄义
只管DBI级是自力于数据库的,而DBD级是依附于数据库的,但那并非“DBI”和“DBD”所代表的意义。它们的意义是“数据库接口”和“数据库驱动程序”。
PHP剧本一般看起来像是带有嵌进在“<?php”和“?>”标识符中的剧本的HTML页面。一个页面大概包含多少个剧本。这为剧本的开辟供应了一种十分天真的办法。比方,假如您喜好,能够编写一个一般的HTML页面来创立通用的页面框架,然后再增添剧本的内
容。
关于分歧的数据库引擎,PHP对一致的接口不再作任何事变,DBI也用这类办法。取而代之,每一个引擎的接口看起来十分像响应的完成该引擎初级API的C库接口。比方,用于从PHP剧本外部会见MySQL的PHP函数的称号十分相似于MySQLC客户库中函数的称号。


每个人都在使用它。MySQL是开源LAMP组合的一个标准组件:Linux、Apache、MySQL和Perl/PHP。根据Evans的调查,LAMP组合的迅速推广很大程度上代表着MySQL的被广泛接受。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 10:08:50 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
分手快乐 该用户已被删除
板凳
发表于 2015-1-28 06:06:08 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
海妖 该用户已被删除
地板
发表于 2015-2-5 18:54:57 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
莫相离 该用户已被删除
5#
发表于 2015-2-13 06:50:22 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
柔情似水 该用户已被删除
6#
发表于 2015-3-3 18:45:27 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
乐观 该用户已被删除
7#
发表于 2015-3-11 12:43:18 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
小魔女 该用户已被删除
8#
发表于 2015-3-18 18:48:45 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
简单生活 该用户已被删除
9#
发表于 2015-3-26 14:18:40 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 23:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表