仓酷云

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

[学习教程] MSSQL编程:与mysql交互的技能

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
对于insert和delete,event中包含了插入/删除的记录的所有字段的值(太爽了。。)1.5与mysql交互的技能
本节先容如何更无效地且键进事情量较小地与mysql客户机程序举行交互。先容如何更复杂地与服务器毗连,和如何不必每次都重新入手下手键进查询。
1.5.1简化毗连历程
在激活mysql时,有大概必要指定诸如主机名、用户名或口令如许的毗连参数。运转一个程序必要做良多输出事情,这很快就会让人腻烦。有几种办法可最小化所做的键进事情,使毗连更加简单,它们分离为:
■使用选项文件存储毗连参数。
■使用外壳程序的命令汗青反复命令。
■使用外壳程序的别号或剧本界说mysql命令行快速键。
1.使用选项文件
自版本3.22以来,MySQL同意在一个选项文件中存储毗连参数。然后在运转mysql时就不必反复键进这些参数了;仅当您已经在命令行上键进过它们时可使用。这些参数也能够为其他MySQL客户机所用,如为mysqlimport所用。这也暗示在利用这些程序时,选项文件削减了键进事情。为了使用选项文件办法指定毗连参数,可创建一个名为~/.my.cnf(即主目次中的一个名为.my.cnf的文件)。选项文件是一个无格局的文本文件,因而可用任何文本编纂器来创立它。文件的内容所下所示:

[client]行标志客户机选项组的入手下手;它后跟的一切行都是为MySQL客户机程序取得选项值筹办的,这些行一向沿续到文件的开头或另外一分歧的参数组的入手下手。在毗连到服务器时,用指定的主机名、用户名和口令交换serverhost、yourname和yourpass。关于笔者来讲,.my.cnf以下所示:

只要[client]行是必需的。界说参数值的行都是可选的;能够仅指定那些所必要的参数。比方,假如您的MySQL用户名与UNIX的登录名不异,则不必要包含user行。在创立了.my.cnf文件后,设置其会见体例为某个限制值以包管他人不克不及读取它:

在Windows下,选项文件的内容是不异的,但其称号分歧(c:my.cnf),并且不挪用chmod命令。由于选项文件在版本3.22前未加到MySQL,以是更早的版本不克不及利用它们。出格是在Windows下,您不克不及与共享MySQL分发包一同失掉的客户机利用选项文件,由于它是基于MySQL3.21的。选项文件在注册过的MySQL的Windows版本下事情得很好,不然能够从MySQLWeb站点获得更新的撑持选项文件的客户机。关于选项文件的具体内容可参阅附录E“MySQL程序参考”。
2.使用外壳程序的命令汗青诸如csh、tcsh和bash如许的外壳程序会在一个汗青列表中记下您的命令,并同意反复该列表中的命令。假如接纳的是如许的外壳程序,其汗青列表可匡助免去完全命令的键进。比方,假如比来挪用了mysql,可按以下命令再次实行它:%!my个中“!”告知外壳程序搜刮全部命令汗青找到比来以“my”开首的命令,并像您打进的一样公布它。有的外壳程序还同意使用上箭头和下箭头键(也许是Ctrl-P和Ctrl-N)在汗青列表中高低挪动。可用这类办法选择想要的命令,然后按Enter实行它。tcsh和bash有这类功效,而其他外壳程序也大概有。可参阅响应的外壳程序以找到更多利用汗青列表的内容。
3.使用外壳程序的别号或剧本假如利用的外壳程序供应别号功效,那末能够设置同意经由过程键进冗长名挪用长寿令的命令快速键。比方,在csh或tcsh中,可使用alias命令设置名为samp_db的别号,以下所示:

而bash中的语法稍有分歧:

能够界说一一般名使这两个命令等价:

明显,第一个比第二个更好键进。为了使这些别号在每次登录时都起感化,可将在外壳程序设置文件中放进一个alias命令(如,csh放进.cshrc,而bash放进.bash_profile)。快速键的其他情势是创建使用得当的选项实行mysql的外壳程序剧本。在UNIX中,等价于samp_db别号的剧本文件以下所示:

假如笔者定名此剧本为samp_db并使其可实行(用chmod+xsamp_db),那末能够键进samp_db运转mysql并毗连到笔者的数据库中。在Windows下,可用批命令文件来完成不异的事情。定名文件samp_db.bat,并在个中放进以下的行:

此批命令文件可经由过程在DOS把持台提醒符下键进samp_db来实行,也能够双击它的Windows图标来实行。假如会见多个数据库或毗连到多个主机,则能够界说几一般名或剧本,每个都用分歧的选项挪用mysql。
1.5.2以较少的键进公布查询
mysql是一个与数据库举行交互的极其有效的程序,可是其界面最合适于冗长的、单行的查询。固然,mysql本身其实不体贴某个查询是不是分红多行,可是长的查询很欠好键进。输出一条查询也不是很风趣的事,即便是一条较短的查询也是云云,除非发明有毛病才乐意从头键进它。
有几种可用来制止不用要的键进或从头键进的技能:
■使用mysql的输出行编纂功效。
■使用拷贝和粘贴。
■以批体例运转mysql。
■使用现无数据来创立新纪录以免键进INSERT语句。
1.使用mysql的输出行编纂器
mysql具有内建的GNUReadline库,同意对输出行举行编纂。能够对以后录进的行举行处置,或修改之前输出的行偏重新实行它们(原样实行或做进一步的修正后实行)。在录进一行并发明毛病时,这长短常便利的;您能够在按Enter键前,外行内退格并举行修改。假如录进了一个有错的查询,那末能够挪用该查询并对其举行编纂以办理成绩,然后再从头提交它。(假如您在一行上键进了全部查询,这是最简单的办法。)表1-4中列出了一些十分有效的编纂序列,除此表中给出的之外,另有很多输出编纂命令。使用因特网搜刮引擎,应当可以找到Readline手册的联机版本。此手册也包括在Readline分发包中,可在http://www.gnu.org/的GNUWeb站点失掉。

上面的例子形貌了输出编纂的一个复杂的利用。假定用mysql输出了以下查询:

假如在按Enter前,已注重到将“president”错拼成了“persident”,则可按左箭头或Ctrl-B屡次挪动光标到“s”的右边。然后按Delete两次删除“er”,键进“re”更正毛病,并按Enter公布此查询。假如没注重到错拼就按了Enter,也不会有成绩。在mysql显现了毛病动静后,按上箭头或Ctrl-P修改该行,然后对其举行编纂。
输出行编纂在mysql的Windows版中不起感化,可是可从MySQLWeb站点获得收费的cygwin_32客户机分发包。在该分发包中的mysqlc程序与mysql一样,但它撑持输出行编纂命令。
2.使用拷贝和粘贴公布查询
假如是在窗口情况下事情,可将以为有效的查询文本保留在一个文件中并使用拷贝和粘贴操纵很简单地公布这些命令。其事情历程以下:
1)在Telnet窗口或DOS把持窗口中激活mysql。
2)在一个文档窗口翻开包括查询的文件。(如笔者在MacOS下利用BBEdit,在UNIX中利用XWindowSystem下的xterm窗口中的vi。)
3)为了实行寄存在文件中的某个查询,选择并拷贝它。然后切换到Telnet窗口或DOS把持台,并将该查询粘贴到mysql。这个历程写起来仿佛有点使人厌恶,但它是一个疾速录进查询的很简单的办法,实践利用时不必键进查询。这个办法也同意在文档窗口中对查询举行编纂,并且它同意拷贝和粘贴现有查询来机关一个新的查询。比方,假如您常常从某个特定的表当选择行,可是喜好检察以分歧体例寄存的输入了局,则能够在文档窗口中保留一个分歧的ORDERBY子句的列表,然后为恣意的特定查询拷贝和粘贴想利用的谁人子句。也可按其他偏向拷贝和粘贴(从Telnet到查询文件)。在mysql中录进行时,它们被保留在您的主目次中的名为.mysql_history的文件中。假如您手工录进了一个但愿保留起来从此利用的查询,可加入mysql,在某个编纂器中翻开.mysql_history,然后从.mysql_history拷贝和粘贴此查询到您的查询文件。
3.以批体例运转mysql纷歧定必需交互式地运转mysql。mysql可以以非交互式(批)体例从某个文件中读取输出。这关于按期运转的查询是很有效的,由于您必定不但愿每次运转此查询时都要从头键进它。只需一次性地将其放进一个文件,然后让mysql在必要时实行该文件的内容便可。假定有一个查询查找member表的interests列,以找出那些对美国汗青的某个方面感乐趣的汗青联盟会员。如查找对年夜冷落期有乐趣的会员,可编写此查询以下(注重开头处有一个分号,从而mysql可以晓得查询语句在那边停止):

为了利用此查询来找出对ThomasJefferson感乐趣的会员,能够编纂此查询文件将depression变动为Jefferson并再次运转mysql。只需不很常常利用此查询,它事情得很好。假如常常利用,则必要更好的办法。利用此查询更加天真的一种办法是将其放进一个外壳程序剧本中,此剧本从剧本命令行取一个参数并使用它来变动查询的文本。如许断定查询的参数,使得可以在运转剧本时指定使人感乐趣的关头字。为了懂得这怎样起感化,按以下编写一个较小的外壳程序剧本interests.sh:

个中第二行包管在命令行上有一个关头字;它显现一条冗长的动静,大概加入。在<<QUERY_INPUT和最初的QUERY_INPUT之间的一切内容成为mysql的输出。在查询文本中,外壳程序用来自命令行的关头字交换$1。(在外壳程序剧本中,$1、$2...为命令参数。)这使响应的查询反应了实行此剧本时在命令行上指定的关头字。在可以运转此剧本前,必需使其可实行:

如今不必要在每次运转剧本时对其举行编纂了。只需在命令行上告知它必要查找甚么就好了。以下所示:

4.使用现无数据来创立新纪录
能够用INSERT语句每次一行地将新纪录追加到表中,可是在经由过程手工键进INSERT语句创建几个新纪录后,多半人城市意想到应当有更好的追加纪录的办法。一种选择是使用仅含无数据值的文件,然后使用LOADDATA语句或mysqlimport有用程序从该文件中装进纪录。一般,可使用已以某种格局存在的数据来创建数据文件。这些数据信息大概包括在电子表中,也许在某个其他数据库中,应当将它们转换到MySQL。为了先容起来复杂,我们假定这些数据是在桌面微盘算机的电子表中。要将电子表数据从桌面微盘算机直达换到您的UNIX账号下的某个文件中,可分离Telnet使用拷贝和粘贴。详细事情以下所示:1)翻开UNIX账号的一个Telnet毗连。在MacOS下,可使用诸如BetterTelnet或NCSATelnet如许的使用程序。在Windows下,可以使用尺度的Telnet程序。
2)翻开电子表,选择想转换的数据块,拷贝它。
3)在Telnet窗中,键进以下命令入手下手猎取数据到文件data.txt。

cat命令守候输出。
4)将从电子表拷贝来的数据粘贴到Telnet窗口。cat以为您正在键进信息并忠厚地将它写进到data.txt文件。
5)在一切粘贴数据已写进该文件后,假如光标中断在数据行的开头处而不是中断在新行的入手下手,按Enter。然后,按Ctrl-D以唆使“文件停止”。cat中断输出守候并封闭data.txt文件。如今已失掉了包括有电子表当选择的数据块的data.txt文件,此文件已作好由LOADDATAmysqlimport加载到数据库的筹办。
拷贝和粘贴是一种将数据传进UNIX文件的疾速且浅易的办法,但它最合适较小的数据集。量较年夜的数据大概会超越体系拷贝缓冲区。在如许的情形下,最好是以无格局文本(制表符分开)的情势保留电子表。然后可使用FTP将响应文件从微机上传送到UNIX账号。转换文本形式(非二进制或影象形式)的文件以便行停止符转换为UNIX的行停止符。(UNIX使用换行符、MacOS使用回车换行符、Windows使用回车换行符/换行符对作为行停止符。)可告知LOADDATA或mysqlimport寻觅甚么换行符,可是在UNIX下,对含换行符的文件处置要更简单一些。
在转换了文件以后,应当反省一下在开头处是不是具空缺行。假如有,应当将它们删除,不然在将该文件装载到数据库时,这些空缺即将会转换为空缺或畸形的纪录。来自电子表格以无格局文本保留的文件,或具有能括住包括空格的值的括号。为了在将该文件装进数据库时往失落这些括号,可使用LOADDATA的FIELDSENCLOSEDBY子句,或使用mysqlimport的--fields-enclosed-by选项。更具体的信息请参看附录D中LOADDATA的响应项。
1.6向那边往
如今我们已先容了很多利用MySQL的常识。您已晓得了如何设置数据库并创立表。可以将纪录放进这些表中,并以各类体例对其举行检索,变动或删除。可是要把握MySQL仍旧有很多常识要学,本章中的教程仅仅给出了一些浅易的器材。经由过程考查我们的样例数据库就会分明这一点。我们创立了样例数据库及其表,并用一些初始的数据对其举行了添补。在这个事情过程当中,我们分明了如何编写查询,回覆关于数据库中信息的某些成绩,可是另有很多事情要做。
比方,我们没无方便的交互体例来输出学分保留计划的新学分纪录,或输出汗青联盟地点名录的会员条目。还没无方便的办法来编纂现有纪录,并且我们仍旧不克不及天生印刷或联机情势的联盟地点名录。这些义务和一些其他的义务将在今后的各章中连续地举行先容,出格是在第7章“PerlDBIAPI”和第8章“PHPAPI”中将要举行具体地先容。
下一步将浏览本书中哪部分取决于您对甚么内容感乐趣。假如但愿懂得如何完成已以
汗青联盟和学分保留计划入手下手的事情,可看第一部分有关MySQL程序计划的内容。假如盘算成为某个站点的MySQL办理员,本书的第三部分将对办理事情做较多的先容。可是,笔者倡议经由过程浏览第一部分中的其他各章,起首取得利用MySQL的一样平常背景常识。
这些章节会商了MySQL如何处置数据,进一步供应有关语法和查询语句的用处,而且申明了如何使查询运转得更快。不论您在甚么情况中利用MySQL,不论是运转mysql仍是编写本人的程序,
仍是作为数据库办理员,用这些内容打下一个优秀的基本将有助于您站在一个较高的出发点上。

php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。
山那边是海 该用户已被删除
沙发
发表于 2015-1-19 09:03:47 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
老尸 该用户已被删除
板凳
发表于 2015-1-24 12:03:06 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
海妖 该用户已被删除
地板
发表于 2015-2-1 10:01:51 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
小女巫 该用户已被删除
5#
发表于 2015-2-7 03:05:22 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
变相怪杰 该用户已被删除
6#
发表于 2015-2-20 00:47:32 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
爱飞 该用户已被删除
7#
发表于 2015-3-6 16:00:31 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
简单生活 该用户已被删除
8#
发表于 2015-3-13 04:08:31 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
不帅 该用户已被删除
9#
发表于 2015-3-20 12:24:27 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 10:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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