兰色精灵 发表于 2015-1-16 22:23:18

MYSQL编程:MySQL程序计划先容

下面我将描述五个不使用MySQL的响亮理由。
在本书的这部分中,我们将会商编写本人的会见MySQL数据库的程序所必要晓得的内容。MySQL有一组有用程序。比方,mysqldump导出表的高低文和布局界说,mysqlimport将数据文件加载到表中,mysqladmin完成办理w操纵,mysql可使用户与服务器交互来实行恣意的查询。每一个尺度的MySQL有用程序都偏向于玲珑,重点放在程序可完成特定的、无限的功效。即便mysql也是云云,从感到上说,mysql比其他有用程序更天真,因而能够用它来实行任何数目的各类查询,即它就是为同意向服务器间接公布SQL查询,并可检察查询了局这一单一目标而计划的。
MySQL客户机这类无限的特征并非弱点,而是特地计划的。程序是具有通用目标的有用程序;它们其实不试图意料您所想做的一切大概的必要。MySQL的开辟者们不同意编写年夜型的、痴肥的程序来试图做大概想往做的每件事变(并且如许做的了局将使程序中包含大批的
您基本不体贴的事变的代码)。但是,偶然有些使用的确有惯例客户机的才能所没法处置的需求。为了处置这些情形,MySQL供应一个客户机编程库。这同意您编写本人的程序,满意您的使用程序大概具有的任何特定需求。经由过程同意您对MySQL服务器的会见,客户机的开放
水平只受您本人设想力的限定了。
编写本人的程序能够猎取怎样特别的才能呢?让我们对照一下mysql客户机和其没有附加代码的接口对MySQL服务器的会见:
■能够定制输出处置。用mysql能够输出原始的SQL语句。用本人的程序,能够为用户供应利用起来更直不雅、更简单的输出办法。用程序可以使用户不用晓得SQL―乃至不用晓得在完成的义务中数据库承当的脚色。
输出信息的收罗多是像命令行作风的提醒和值读取如许基础的体例,大概多是利用屏幕办理程序包(如curses或S-Lang)、利用Tcl/Tk的X窗口或Web扫瞄器格局完成的基于屏幕输出那样庞大的体例。
对年夜多半人来讲,经由过程填写必定的格局来指定搜刮参数的情势比经由过程公布SELECT语句更简单。比方,一名房地产掮客人,要寻觅必定代价局限、作风或地位的衡宇,只需将查寻参数输出到表格中,就能够最小的价值失掉切合前提的内容。输出新纪录或更新已有纪录也相似地思索这类使用。在数据输出部门的键盘操纵员应当不必要晓得像INSERT、REPLACE或UPDATE如许的SQL语法。
在终极用户和MySQL服务器之间提出输出收罗层的另外一个缘故原由是能够校验用户供应的输出。比方,能够反省数据,确认它们是切合MySQL请求的格局,或能够请求填写特定的地区。
■能够定制输入。mysql的输入基础上是无格局的;能够选择以制表符为分开符或以表格情势输入。假如想要使输入了局看起来对照好,则必需本人对它举行格局化。这些需求大概像打印“Missing”而不是NULL如许复杂,也大概更庞大。思索上面的呈报:

这个呈报包含几个特定的元素:
■定制题目。
■在State列中反复值的克制以便只在变动时才将这些值打印出来。
■小计和总计的盘算。
■数字格局,如94384.24,打印为美圆数目为$94,384.24。关于一些义务,乃至大概不必要任何输入。您大概正在对盘算向后拔出到另外一个数据库表中的了局举行复杂地检索信息。除用户运转这个查询之外,乃至大概还想将这个了局输入到其他中央。比方,假如正在提取姓名和电子邮件地点以主动地填进为批量电子邮件天生函件格局的过程当中,则程序发生输入。可是该输入由邮件承受者的信息构成,而没有运转程序职员的信息。
■能够在SQL本身施加的束缚前提的情况下事情。SQL不是一种带有前提选择、轮回和子例程的流程把持布局的历程言语。SQL剧本包含一组从入手下手到停止一次一个的可实行语句,具有最低限制的毛病反省。
假如在批处置形式中利用mysql实行SQL查询的一个文件,则mysql在呈现第一个毛病前进出,大概,假如指定--force选项,则不论呈现几毛病,都不加选择地实行一切查询。程序能够环绕语句供应流程把持,以即可以有选择地顺应查询的乐成或失利。能够依据另外一个查询的乐成或失利来实行一个查询,或依据前一个查询的了局来决意下一步要做的事变。SQL具有十分无限的语句间的一连性,这点也被带到mysql中。利用一个查询的了局,并将它们使用于另外一个查询中,或将多个查询了局接洽在一同是坚苦的。LAST_INSERT_ID()可用于猎取由前一个语句最重生成的AUTO_INCREMENT值,仅仅是关于它的。
更一样平常的情形是,要想检索一组纪录,然后利用每笔记录作为一系列庞大的进一步操纵的基本是坚苦的。比方,检索一个消耗者列表然后查询每一个消耗者的具体信誉汗青,对每一个客户来讲大概要包含多少个查询。在某些情形下,大概想开辟票,在发票头写上必要接洽的客户信息,然后顺次序列出每项条目。mysql不合适这些范例的义务,由于大概必要依附于前几个查询了局的多少查询,而且这些义务超越了mysql的结构计划的才能。一样平常来讲,除mysql外,还必要工具来实行包含主-详目干系和具有庞大输入格局需求的义务。程序供应将查询毗连在一同的“胶”,并可用一个查询的输入作为另外一个查询的输出。
■能够将MySQL集成就任何使用程序中。很多程序都使用数据库的才能供应信息。经由过程公布一个疾速查询,使用程序能够校验消耗者号或反省一项条目是不是在产物清单中。假定一个客户要寻觅某些作者的一切书,则Web使用程序能够在数据库中查找它们,
然后将了局显现在该客户的扫瞄器上。
经由过程利用挪用带有包括SQL语句的输出文件的mysql的外壳剧本(shellscript),能够完成一种开端的“集成”,然后,再利用其他UNIX有用程序加工这些输入。可是这大概变得很丢脸,出格是当义务变得更庞大时。当使用程序不休增加成为混乱的修补事情时,它也大概发生一种“在事情,但以为有毛病”的感到。别的,运转其他命令的外壳剧本的创立历程的开支大概凌驾您的料想。但它大概更无效率地与MySQL服务器间接交互,当在使用程序实行的每一个阶段必要它的时分,都能够准确地提取想要的信息。针对我们在第1章“MySQL和SQL先容”中安装的样例数据库samp_db,我们已枚举了多少必要本人编写与MySQL服务器交互的程序的方针。这些方针中的一些显现鄙人面的列表中:
■为打印而格局化HistoricalLeague目次。
■思索表面和联机目次的寻觅。
■经由过程电子邮件向成员发送增补关照。
■利用Web扫瞄器很简单地将分数输出到学分册中。
在一些细节方面,我们将思索的一个方面是将MySQL的才能与Web情况分离起来。MySQL不间接供应对Web使用程序的撑持,但经由过程组合带有得当的工具的MySQL,经由过程Web能够很简单地会见数据库。利用Web服务器能够指定查询,向客户的扫瞄器呈报了局。将MySQL和Web分离大概有两个设法:
■次要的乐趣在于数据库,只是想利用Web作为工具来猎取对数据更简单的会见。在如许的设法下,数据库的地位是分明且分明的,由于它是乐趣的核心。比方,能够编写Web页来同意检察数据库所包括的表、表的布局,及表的内容。您盘算利用Web服务器来进步对MySQL的会见才能。这大概也是MySQL办理者的概念。
■次要的乐趣多是Web站点,为了使站点的内容对会见者更有代价,您大概想利用MySQL作为一个工具。比方,假如为站点的会见者运转信息板或会商清单,则可使用MySQL保存信息的轨迹。在这类情形下,数据库的脚色更奇妙,会见者乃至能够不体贴您必需供应给他在服务器中实行的部分。您盘算利用MySQL进步Web服务器的才能。这大概也是Web站点开辟者的一个概念。
这些设法其实不冲突。比方,在HistoricalLeague情形下,我们想经由过程同意联机输出来作为成员猎取会见成员目次内容的一种办法而利用Web。供应对数据库的会见是Web的一个用法。同时,League的Web站点在某些方面有些不完整,以是向站点增添目次内容,以便为成员进步站点的代价。加强站点所供应的服务是数据库的一种用法。
不管您怎样对待MySQL与Web的分离,完成办法都是相似的,行将前台的Web站点与背景的MySQL毗连,利用Web服务器作为前言。Web服务器将查询从用户发送到MySQL服务器,检索查询了局,然后将它们传送给客户,在扫瞄器上显现。
固然,纷歧定要联机处置数据,但如许做常常有优点,出格是与经由尺度的MySQL客户机程序会见数据做对照时:
■经由过程Web会见数据,人们可使用他们喜好的扫瞄器,在他们喜好的平台上运转。他们不限定MySQL客户机程序所运转的体系。Web扫瞄器更是如许,不管MySQL客户机散布怎样普遍。
■Web界面的利用比自力命令行的MySQL客户机程序的利用更复杂。
■Web界面能够依据特别使用程序的请求来定制。而MySQL客户机程序是用流动接口来完成基础功效的工具。
■静态Web页面扩大了MySQL的才能,它能够做到用MySQL客户机很难做到或基本不成能做到的事变。比方,仅用MySQL客户机程序不成能真正地使一体化购置车辆的使用程序组分解全体。
任何编程言语都可用来编写基于Web的使用程序,可是,有些言语比其他言语更合适一些。请参阅5.2节“选择API”,我们将看到这点。


MySQL的低成本来自于其简单性吗?它的普及性是由于其低成本吗?其实,在MySQL的最“好”与最“不好”的功能之间没有明显的分界线,但它们组合在一起就形成了一副让我们欣赏的作品。

第二个灵魂 发表于 2015-1-19 10:08:56

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

深爱那片海 发表于 2015-1-28 06:06:08

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

蒙在股里 发表于 2015-2-5 18:57:01

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

愤怒的大鸟 发表于 2015-2-13 06:50:49

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

海妖 发表于 2015-3-3 18:45:27

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

老尸 发表于 2015-3-11 12:43:18

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。

分手快乐 发表于 2015-3-18 18:48:45

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。

莫相离 发表于 2015-3-26 14:18:52

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
页: [1]
查看完整版本: MYSQL编程:MySQL程序计划先容