仓酷云

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

[学习教程] MYSQL编程:MySQL教程

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:23:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
DBaaS和其他云服务之间的区别是:DBaaS专注于提供类似关系数据库管理系统RDBMS(比如SQLServer、MySQL和Oracle)的数据库功能。事实上,RDBMS已被证明是一种适合于在各种情况下管理结构化数据的有效工具。<P>
如今我们已具有了所需的一切基本常识;能够将MySQL投进事情了!本节供应一个教程,匡助熟习MySQL。在完成这个教程时,将创立一个样例数据库和这个数据库中的表,然后增添、检索、删除和修正信息与数据库举行交互。别的,在操纵这个样例数据库的过程当中,将能学到以下器材:
■怎样使用mysql客户机程序与MySQL通讯。
■SQL言语的基础语句。(假如您已经利用过其他RDBMS,从而熟习SQL,那末扫瞄一下这个教程,看看SQL的MySQL版与您熟习的版本有何不同也是很好的。)正如上一节所述,MySQL接纳客户机/服务器系统布局,个中服务器运转在寄存数据库的呆板上,而客户机经由过程收集毗连到服务器。这个教程次要基于mysql客户机的使用。mysql读取您的SQL查询,将它们发送给服务器,并显现了局。mysql运转在MySQL所撑持的一切平台上,并供应与服务器交互的最间接的手腕,因而,它起首是一个逻辑上的客户机。
在本书中,我们将用samp_db作为样例数据库的称号。可是有大概在您完本钱例子的过程当中必要利用另外一个数据库名。由于大概在您的体系上已有某团体利用了samp_db这个称号,大概办理员给您指定了另外一个数据库称号。在前面的例子中,不管是哪一种情形,都用数
据库的实践称号取代samp_db。表名能够像例子所显现的那样准确地利用,即便体系中的多团体都具有他们本人的样例数据库也是云云。特地说一下,在MySQL中,假如有人利用了不异的表名也没甚么干系。一旦各个用户都具有本人的数据库,MySQL将一向保存这些数据库名,避免各用户相互搅扰。
<FONTcolor=#000000>1.4.1基础请求
为了实验这个教程中的例子,必需安装MySQL。出格是必需具有对MySQL客户机和某个MySQL服务器的会见权。响应的客户机程序必需位于您的呆板上。最少必要有mysql程序,最好另有mysqlimport程序。服务器也能够位于您的呆板上,只管这不是必需的。实践上,只需同意毗连到服务器,那末服务器位于何地位都没有干系。若服务器正巧运转在您的呆板上,得当的客户机程序又已安装,那末就能够入手下手实验了。假如您尚需想法弄到MySQL,可参阅附录A“取得和安装软件”的申明。假如您正本人安装MySQL,可参阅这一章,或把它给办理员看。假如收集会见是经由过程一个因特网服务商(ISP)举行的,那末可检察该服务商是不是具有MySQL。假如该ISP不供应MySQL服务,可检察附录J“因特网服务商”以失掉某些选择更合适的服务商的倡议。
除MySQL软件外,还必要失掉创立样例数据库及其表的权限。假如您没有这类权限,能够向MySQL办理员征询。办理员可经由过程运转mysql并公布以下的命令供应这类权限:

MySQL与mysql的区分
为了不搅浑,应当申明,“MySQL”指的是全部MySQLRDBMS,而“mysql”代表的是一个特定的客户机程序名。它们的发音都是不异的,但可经由过程分歧的巨细写字符和字体来辨别。关于发音,MySQL的发音为“my-ess-queue-ell”。我们晓得这是由于MySQL参考指南中是如许发音的。而SQL的发音为“sequel”或“ess-queue-ell”。我不以为哪一个发音更好一些。乐意读哪一个音都能够,不外在您对他人读的时分,他大概会用他以为是“准确”的发音对您举行改正。
前一个命令在paul从localhost(服务器运转在正运转的统一主机)毗连时,同意它完整会见samp_db数据库及它的一切表。它还给出了一个口令secret。第二个命令与第一个相似,但同意paul从任何主机上毗连(“%”为通配符)。也能够用特定的主机名代替“%”,使paul只能从该主机长进行毗连。(假如您的服务器同意从localhost匿名会见,因为服务器搜刮受权表查找输出毗连婚配的体例的缘故原由,如许一个GRANT语句多是必需的。)关于GRANT语句和设置MySQL用户账号的更具体信息,可在第11章“惯例的MySQL办理”找到。
1.4.2获得样例数据库的分发包
这个教程在某些中央要触及来自“样例数据库分发包”中的文件。有的文件含有匡助来设置样例数据库的查询或数据。为了失掉这个分发包,可参阅附录A。在翻开这个分发包时,将创立一个名为samp_db的目次,此目次中含有所需的文件。不管您在哪一个中央实验与样例数据库有关的例子,倡议都移进该目次。
1.4.3创建和中断与服务器的毗连
为了毗连到服务器,从外壳程序(即从UNIX提醒符,或从Windows下的DOS把持台)激活mysql程序。命令以下:

个中的“%”在本书中代表外壳程序提醒符。这是UNIX尺度提醒符之一;另外一个为“$”。在Windows下,提醒符相似“c:>”。
mysql命令行的options部分多是空的,但更大概的是公布一条相似以下的命令:

在激活mysql时,有大概不用供应一切这些选项;切实利用的命令请征询MySQL办理员。别的,大概还必要最少指定一个称号和一个口令。
在刚入手下手进修MySQL时,也许会为其平安体系而懊恼,由于它使您难于做本人想做的事。(您必需获得创立和会见数据库的权限,任什么时候候毗连到数据库都必需给出本人的名字和口令。)可是,在您经由过程数据库录进和利用本人的纪录后,意见就会即刻改动了。这时候您会很浏览MySQL制止了其别人窥视(大概更卑劣一些,损坏!)您的材料。
上面先容选项的寄义:
■-hhost_name(可选择情势:--host=host_name)
但愿毗连的服务器主机。假如此服务器运转在与mysql不异的呆板上,这个选项一样平常可
省略。
■-uuser_name(可选择的情势:--uuser=user_name)您的MySQL用户名。假如利用UNIX且您的MySQL用户名与注册名不异,则能够省往这个选项;mysql将利用您的注册名作为您的MySQL名。在Windows下,缺省的用户名为ODBC。这大概纷歧定十分有效。可在命令行上指定一个名字,也能够经由过程设置USER变量在情况变量中设置一个缺省名。如用以下set命令指定paul的一个用户名:

■-p(可选择的情势:--password)
这个选项告知mysql提醒键进您的MySQL口令。注重:可用-pyour_password的情势(可选择的情势:--password=your_password)在命令行上键进您的口令。可是,出于平安的思索,最好不要如许做。选择-p不跟口令告知mysql在启动时提醒您键出口令。比方:

在看到Enterpassword:时,键出口令便可。(口令不会显到屏幕,以避免给他人看到。)请注重,MySQL口令纷歧定必需与UNIX或Windows口令不异。假如完整省略了-p选项,mysql就以为您不必要口令,不作提醒。请注重:-h和-u选项与跟在它们前面的词有关,不管选项和后跟的词之间是不是有空格。而-p却不是如许,假如在命令行上给出口令,-p和口令之间必定不加空格。比方,假定我的MySQL用户名和口令分离为paul和secret,但愿毗连到在我注册的统一呆板上运转的服务器上。上面的mysql命令能完成这项事情:

在我键进命令后,mysql显现Enterpassword:提醒键出口令。然后我键出口令(******标明我键进了secret)。假如统统顺遂的话,mysql显现一串动静和一个“mysql>”提醒,暗示它正守候我公布查询。完全的启动序列以下所示:

为了毗连到在其他某个呆板上运转的服务器,必要用-h指定主机名。假如该主机为pit-viper.snake.net,则响应的命令以下所示:

在前面的申明mysql命令行的多半例子中,为复杂起见,我们盘算省往-h、-u和-p选项。而且假定您将会供应任何所需的选项。
有良多设置账号的办法,从而不用在每次运转mysql时都在毗连参数中举行键进。这个成绩在1.5节“与mysql交互的技能”中先容。您大概会但愿如今就跳到该节,以便找到一些更容易于毗连到服务器的举措。
在创建了服务器的一个毗连后,可在任什么时候候键进以下命令来停止会话:

还能够键进Control-D来加入,最少在UNIX上能够如许。
1.4.4公布查询
在毗连到服务器后,就能够公布查询了。本节先容有关与mysql交互应当懂得的一些常识。为了在mysql中输出一个查询,只需键进它便可。在查询的开头处,键进一个分号(“;”)并按Enter键。分号告知mysql该查询是完全的。(假如您喜好键进两个字符的话,也能够利用“g”停止查询。)在键进一个查询以后,mysql将其发送到服务器上。该服务器处置此查询并将了局送回mysql,mysql将此了局显现出来。上面是一个复杂的查询例子和了局:

它给出以后的日期和工夫。(NOW()函数自己并没有多年夜用途,但可将其用于表达式中。如对照以后日期和其另日期的差别。)
mysql还在了局中显现行数计数。本书在例子中一样平常不给出这个计数。由于mysql必要见到分号才发送查询到服务器,以是在单一的行上不必要键进分号。假如有需要,可将一个查询分为几行,以下所示:

请注重,在键进查询的第一行后,提醒符从‘mysql’酿成了‘->’;这暗示mysql同意持续键进这个查询。这是一个主要的提醒,由于假如在查询的开端健忘了分号,此提醒将有助于提示您查询尚不完全。不然您会一向等下往,内心烦闷为何mysql实行查询为何这么长的工夫还没完;而mysql也弄不清为何停止查询的键进要花您那末多的工夫!
年夜部分情形下,用年夜写字符、小写字符或巨细写字符夹杂键进查询没甚么干系。以下查询满是等价的:

本书中的例子用年夜写字符暗示SQL关头字和函数名,用小写字符暗示数据库、表和列名。
 假如在查询中挪用一个函数,在函数名和后跟的圆括号两头不同意有空格,例:

这两个查询看上往不同不年夜,但第二个失利了,由于圆括号并没有紧跟在函数名的前面。假如已入手下手键进一个多行的查询,而又不想当即实行它,可键进‘c’来跳过(保持)它,如:

请注重,提醒符又变回了‘mysql>’,这暗示mysql为键进的新查询作好了筹办。可将查询存储在一个文件中并告知mysql从文件中读取查询而不是守候键盘输出。可使用外壳程序键进重定向有用程序来完成这项事情。比方,假如在文件my_file.sql中寄存有查
询,可以下实行这些查询:

可用这类举措挪用任何所需的文件。这里用后缀为“.sql”来暗示该文件含有SQL语句。实行mysql的这类办法将在输出数据到samp_db数据库时的“增添新纪录”中利用。为了装载一个表,让mysql从某个文件中读取INSERT语句比每次用手工键进这些语句更加便利。
本教程的其他部分向您供应了很多能够本人尝尝的查询。这些查询以‘mysql>’提醒为前导后跟停止分号,这些例子一般都给出了查询输入了局。能够按给出的情势键进这些查询,所失掉的了局应当与自学质料中的不异。给出的查询中无提醒符的或无分号语句停止符的只是用来讲明某个要点,不必实行它们。(假如乐意您能够试一下,但假如试的话,请记着给语句开端加一个分号。)本书前面的章节中,我们一样平常不给出‘mysql>’提醒或SQL语句的分号。如许做的缘故原由是为了能够在非mysql客户机程序的言语情况(如在Perl剧本中或PHP剧本中)中公布查询,在这些言语情况中,既无提醒符也不必要分号。在专门针对mysql输出一个查询的场所会作出响应的申明。
1.4.5创立数据库
如今入手下手创立samp_db样例数据库及其表,添补这些表并对包括在这些表中的数据举行一些复杂的查询。
利用数据库触及几个步骤:
1)创立(初始化)数据库。
2)创立数据库中的表。
3)对表举行数据拔出、检索、修正或删除。
检索现无数据是对数据库实行的最复杂且罕见的操纵。别的几个最复杂且罕见的操纵是拔出新数据、更新或删除现无数据。较少利用的操纵是创立表的操纵,而最不经常使用的操纵是创立数据库。
我们将重新入手下手,先创立数据库,再拔出数据,然后对数据举行检索。为了创立一个新的数据库,用mysql毗连到数据库然后公布CREATEDATABASE语句,此语句指定了数据库名:

在创立表和对这些表举行各类操纵之前,必需先创立samp_db数据库。创立数据库后,这个新创立的数据库并非以后数据库。这可从实行上面的查询看出:

为了使samp_db成为以后数据库,公布USE语句便可:

USE为多数几个不必要闭幕符的语句之一,固然,加上闭幕符也不会堕落。HELP是另外一个不必要闭幕符的语句。假如想懂得不必要闭幕符的语句有哪些,可公布HELP语句。在公布了USE语句后,samp_db成为缺省数据库:

使数据库成为以后数据库的另外一个办法是在激活mysql时在命令行上指定它,以下所示:

现实上,这是一个定名要利用的数据库的办法。假如必要毗连参数可在数据库名前指定。比方,以下两个命令使我们能毗连到在当地主机和pit-viper.snake.net上的samp_db数据库上:

除非尚有指定,不然前面的例子都假定在激活mysql时,在命令行上给出samp_db使其成为以后数据库。假如激活数据库时忘了在命令行上指定命据库,只需公布USEsamp_db语句便可。
1.4.6创立表
本节中,我们将创立样例数据库samp_db所需的表。我们起首思索美国汗青联盟必要的表。然后再思索学分保留计划所需的表。在某些数据库的书本中,在这里要年夜讲剖析与计划、实体―干系图、尺度程序和诸云云类的器材。这里的确也能够讲这些器材,可是我宁肯只讲点有用的器材,例如说,我们的数据库应当是如何的:数据库中将包括甚么内容,每一个表中有哪些数据和由决意怎样暗示数据而带来的一些成绩。这里所作出的关于数据暗示的选择并非相对的。在其他场所下,大概会选择分歧的体例来暗示相似的数据,这取决于使用的必要和盘算将数据派何用处。
1.美国汗青联盟所需的表
美国汗青联盟的表计划相称复杂:
■总统(president)表。此表含有形貌每位总统的纪录。联盟站点上的联机检验要利用这个表。
■会员(member)表。此表用来保护联盟每一个会员确当前信息。这些信息将用来创建会员地点名录的书面和联机版本、发送会员资历更新提醒等等。
(1)president表
president表很复杂,因而我们先会商它。这个表将包括每位美国总统的一些基础信息:
■姓名。姓名在一个表中可用几种体例暗示。如,能够用一个单一的列来寄存完全的姓名,大概用分隔的列来分离包容名和姓。固然用单一的列更加复杂,可是在利用上会带来一些限定,如:
■假如先输出只要名的姓名,则不成能对姓举行排序。
■假如先输出只要姓的姓名,就不成能对具着名的姓名举行显现。
■难以对姓名举行搜刮。比方,假如要搜刮某个特定的姓,则必需利用一个特定的形式,而且查找与这个形式婚配的姓名。如许较之只查找姓效力更低和更慢。member表将利用独自的名和姓的列以免这些限定。名列还寄存中名(注:东方国度的姓名一样平常将名放在前,姓放在后,并且除着名和姓外,偶然另有中名,这是在地位上介于名和姓之间的两头名字)或首字母。如许应当不会减弱我们大概举行的任何一种排序,由于一样平常不成能对中名举行排序(大概乃至不会对名举行排序)。姓名便可以“Bush,GeorgeW.”格局显现,也能够“GeorgeW.Bush”格局显现。另有一种稍显庞大一点的情况。一个总统(JimmyCarter)在其姓名的开端处有一
个“Jr.”,这时候如何做?依据名字打印的格局,这个总统的姓名显现为“JamesE.Carter,Jr.”或“Carter,JamesE.,Jr.”,“Jr.”与名和姓都没有干系,因而我们将建别的一个字段来寄存姓名的后缀。这标明在试图断定如何暗示数据时,即便一个特别的值也大概会带来成绩。它也标明,为何在将数据放进数据库前,只管对数据值的范例举行懂得是一个很好的设法。假如对数据懂得不敷,那末有大概在已入手下手利用一个表后,不能不变动该表的布局。这纷歧定是个劫难,但一般应当制止。
■出身地(乡村和州)。就像姓名一样,出身地也能够用单个列或多个列来暗示。利用单列更加复杂些,但正如姓名中的情况一样,自力的多个列使我们能够完成用单个列不便利完成的事变。比方,假如乡村和州分离给出,查找列位总统出身在哪一个州的纪录就会更简单一些。
■出身日期和出生日期。这里,独一特别的成绩是我们不克不及请求都填上出生日期,由于有的总统如今还健在。MySQL供应了一个特别的值NULL,暗示“无值”,可将其用在出生日期列中以暗示“仍旧健在”。
(2)member表
存储汗青联盟会员清单的member表在每一个纪录都包括单团体员的基础形貌信息这一点上,相似于president表。可是每一个member的纪录所含的列更多,member表的各列以下:
■姓名。利用如president表一样的三个列来暗示:姓、名(假如大概的话另有中名)、后缀。
■ID号。这是入手下手纪录会员时赋给每一个会员的独一值。之前联盟未用ID号,但如今的纪录做得更有体系性,以是最好入手下手利用ID号。(我但愿您找到有益于利用MySQL并思索到其他的将它用于汗青联盟纪录的办法。利用数字,将member表中的纪录与其他预会员有关的表中的纪录相干联要更简单一些。)
■停止日期。会员必需按期更新他们的会员资历以避免取消。关于某些使用,大概会用到比来更新的日期,可是近更新日期不合适于汗青联盟。会员资历可在可变的年纪内(通常是一年、二年、三年或五年)更新,而比来更新的日期将不克不及暗示下一次更新必需在什么时候举行。别的,汗青联盟还同意有毕生会员。我们能够用将来一个很长的日期来暗示毕生会员,可是用NULL仿佛更加符合,由于“无值”在逻辑上对应于“永不停止”。
■电子邮件地点。关于有电子邮件地点的会员,这将使他们能很简单地举行互相之间的通讯。作为汗青联盟秘书,这使您能电子化地发送更新关照给会员,而用不着发邮政信函。这比到邮局发送信函更简单,并且也不贵。还能够用电子邮件给会员发送他们的地点名录条目标以后内容,并请求他们在有需要时更新信息。
■邮政地点。这是与没有电子邮件(或没有前往信息)的会员联系所必要的。将分离利用街道地点、乡村、州和Zip号。街道地点列又能够用于有诸如P.O.Box123而不是123ElmSt.的会员的信箱号。我们假定一切联盟会员全都住在美国。固然,关于具有国际会员的机构,此假定过于简化了。假如但愿处置多个国度的地点,还必要对分歧国度的地点格局作一些事情。比方,这里的Zip号就不是一个国际尺度,有的国度有省而不是州。
■德律风号码。与地点字段一样,这个列关于联系会员也是很有效的。
■特别喜好的关头词。假定每一个会员一样平常都对美国汗青都有乐趣,但大概有的会员对某些范畴有特别的乐趣。此列纪录了这些特别的乐趣。会员能够使用这个信息来找到其他具有相似乐趣的会员。
(3)创立表
如今我们已作好了创立汗青联盟表的筹办。我们用CREATETABLE语句来完成这项事情,其一样平常格局以下:

个中tbl_name代表但愿付与表的称号。column_specs给出表中列的申明,和索引的申明(假如有的话)。索引能使查找更快;我们将在第4章“查询优化”中对其作进一步的先容。
president表的CREATETABLE语句以下所示:

假如想本人键进这条语句,则挪用mysql,使samp_db为以后数据库:

然后,键进如上所示的CREATETABLE语句。(请记着,语句开头要增添一个分号,不然mysql将不晓得哪儿是语句的开头。)
为了使用来自样例数据库分发包的事后写下的形貌文件来创立president表,可从外壳程序运转以下命令:

不论用哪一种办法挪用mysql,都应当在命令行中数据库名的后面指定毗连参数(主机名、用户名或口令)。CREATETABLE语句中每一个列的申明由列名、范例(该列将存储的值的品种)和一些大概的列属性构成。president表中所用的两种列范例为VARCHAR和DATE。VARCHAR(n)代表该列包括可变长度的字符(串)值,其最年夜长度为n个字符。可依据希冀字符串能有多长来选择n值。
state界说为VARCHAR(2);即一切州名都只用其两个字符的缩写来暗示。其他的字符串列则必要更长一些,以便寄存更长的值。
我们利用过的其他列范例为DATE。这类列范例暗示该列存储的是日期值,这一点也不使人受惊。而使人受惊的是,日期的暗示以年份开首。其尺度格局为“YYYY-MM-DD”(比方,“1999-07-18”)。这是日期暗示的ANSISQL尺度。我们用于president表的独一列属性为NULL(值能够短少)和NOTNULL(必需添补值)。多半列是NOTNULL的,由于我们总要有一个它们的值。可有NULL值的两个列是suffix(多半姓名没有后缀)和death(有的总统仍旧健在,以是没有出生日期)。member表的CREATETABLE语句以下所示:

将此语句键进mysql或实行以下外壳程序命令:

从列的范例来看,member表其实不很风趣:一切列中,除一列以外,其他列都是可变长字符串。这个破例的列就是expiration,为DATE型。停止日期值有一个缺省值为“0000-00-00”,这是一个非NULL的值,它暗示未输出正当的日期值。如许做的缘故原由是expiration能够是NULL,它暗示一个会员是毕生会员。可是,由于此列能够为NULL,除非别的指定一个分歧的值,不然它将取缺省值“0000-00-00”。假如创立了一个新会员纪录,但忘了指定停止日期,该会员将成为一个毕生会员!经由过程接纳缺省值“0000-00-00”的办法,制止了这个成绩。它还向我们供应了一种手腕,便可以按期地搜刮这个值,以找出已往未准确输出停止日期的纪录。
请注重,我们“忘了”放进会员ID号的列。这是专门为了今后实习利用ALTERTABLE语句而遗留下的。如今让我们来考证一下MySQL是不是的确如我们所希冀的那样创立了表。在mysql中,公布以下查询:

与MySQL3.23一样,此输入还包含了显现会见权限信息的另外一个列,这里没有给出,
由于它使每行太长,不容易显现。
这个输入了局看上往和我们所希冀的十分分歧,除state列的信息显现它的范例为CHAR(2)。这就有点乖僻了,我们不是界说它为VARCHAR(2)了吗?是的,是如许界说的,可是MySQL已悄然地将此范例从VARCHAR换成了CHAR。缘故原由是为了使短字符串列的
存储空间使用更加无效,这里未几会商。假如但愿具体懂得,可参阅第3章中关于ALTERTABLE语句的先容。但对这里的利用来讲,两品种型没有甚么不同。
假如公布一个DESCRIBEmember查询,mysql也会显现member表的相似信息。DESCRIBE在您忘了表中的列名、必要晓得列的范例、懂得列有多宽等的时分很有效。它关于懂得MySQL存储表行中列的序次也很有效。列的这个存储序次在利用INSERT或LOADDATA语句时十分主要,由于这些语句希冀列值以缺省列的序次列出。DESCRIBE能够省写为DESC,大概,假如您喜好键进较多字符,则DESCRIBEtbl_name另外一个同等的语句为SHOWCOLUMNSFROMtbl_name。
假如忘了表名怎样办?这时候可使用SHOWTABLES。关于samp_db数据库,我们今朝
为止创立了两个表,其输入了局以下:

假如您乃至连数据库名都记不住,可在命令行上挪用mysql而不必给出数据库名,然后公布SHOWDATABASES查询:

数据库的列表在分歧的服务器上是分歧的,可是最少能够看到samp_db和mysql;后一个数据库寄存把持MySQL会见权限的受权表。DESCRIBE与SHOW查询具有可从外壳程序中利用的命令行同等物,以下:
%mysqlshow与SHOWDATABASES一样列出一切数据库
%mysqlshowdb_name与SHOWTABLES一样列出给定命据库的表
%mysqlshowdb_nametbl_name与DESCRIBEtbl_name一样,列出给定表中的列
2.用于学分保留计划的表
为了晓得学分保留计划必要甚么表,我们来看看在本来学分簿上是如何记学分的。-2示出学分簿的一页。该页的主体是一个纪录学分矩阵。另有一些对学分成心义的需要信息。先生名和ID号列在矩阵的一端。(为了复杂悦目,只列出了四个先生。)在矩阵顶端,纪录了举行检验和测试的日期。图中示出9月3号、6号、16号和23号举行检验,9月9号和10月1号进
行测试。
为了使用数据库来纪录这些信息,必要一个学分表。这个表中应当包括甚么纪录呢?很分明,每行都必要有先生名、检验或测试的日期和学分。-3示出了用如许的表暗示的一些来自学分簿的学分。(日期以MySQL的暗示格局“YYYY-MM-DD”暗示。)

可是,以这类体例设置表仿佛有点成绩。仿佛少了点甚么。请看-3中的纪录,我们分辩不出是检验的学分仍是测试的学分。假如检验和测试的学分权重分歧,在断定终极的学分品级时晓得学分的范例是很主要的。也许能够试着从学分的取值局限来断定学分的范例(检验的学分一样平常比测试的学分少),可是如许做很不便利,由于这必要举行判别,并且在数据中也不分明。能够经由过程纪录学分的范例来举行辨别,如对学分表增添一列,此列包括“T”或“Q”以暗示是“测试”或是“检验”,如-4所示。这具有使学分数据范例清析易辨的长处。倒霉的中央是这个信息有点冗余。明显对具有统一给定日期的纪录,学分的范例列老是取不异的值。9月23日的学分老是为“Q”范例,而10月1日的学分其范例老是具有“T”范例。如许使人很不中意。假如我们以这类体例纪录一组检验或测试的学分,不但要为每一个新纪录输出不异的日期,并且还要几回再三反复地输出不异的学分范例。谁会但愿几回再三输出冗余的信息呢?

我们能够尝尝别的一种暗示。不在score表中纪录学分范例,而是从日期上辨别它们。我们能够做一个日期列表,用它来纪录每一个日期产生的“学分事务”(检验或测试)。然后能够将学分与这个事务列表中的信息分离,断定学分是检验学分仍是测试学分。这只需将score表纪录中的日期与event表中的日期相婚配得失事件范例便可。-5示出这个表的计划并演示了score表纪录与9月23日这个日期相干联的事情。经由过程将score表中的纪录与event表中纪录绝对应,我们晓得这个学分来自检验。

这比依据某些推测来揣度学分范例要好很多;我们能够依据明白纪录在数据库中的数据来间接失掉学分范例。这也比在score表中纪录学分范例更好,由于我们只需对每一个范例纪录一次。
可是,在第一次听到这类事变时(即分离利用多个表中的信息),大概会想,“嗯,这是一个好主张,可是不是要做良多事情呢?会不会使事情更庞大了?”在某种水平上,这类设法是对的。处置两个纪录表比处置一个要庞大。可是再来考查一放学分簿(见-2)。不是也纪录了两套器材吗?思索以下现实:
■在学分矩阵顶用两个单位纪录学分,个中每一个单位都是按先生名字和日期(在矩阵的中间和顶上)举行索引的。这代表了一组纪录;与score表的感化不异。
■如何晓得每一个日期代表的事务范例呢?在日期上方写了字符“T”或“Q”!因而,也在矩阵顶上纪录了日期和学分范例之间的干系。它代表第二组纪录;与event表的感化不异。
换句话说,这里倡议在两个表中纪录信息与用学分簿纪录信息所做的事情没甚么分歧。独一分歧的是,这两组信息在学分簿中不是那末分明地被分隔。在-5中所示的event表的计划中加了一个请求,那就是日期必需是独一的,由于要用它毗连score与event表的纪录。换句话说,统一天不克不及举行两次检验,大概统一天不克不及举行一次检验和一次测试。不然,将会在score表中有两个纪录而且在event表中也有两个纪录,全都具有不异的日期,这时候就不晓得应怎样将score的纪录与event的纪录举行婚配。假如天天未几于一个学分事务,这就是一个永久不会呈现的成绩,但是现实并不是云云复杂。偶然,一天中大概会有不止一个学分事务。我常听有的人说他们的数据,“那种乖僻情形从不会呈现。”但是,假如这类情形的确呈现时,就必需从头计划表以顺应这类情形引发的成绩。最好是事后思索今后大概呈现的成绩,并事后筹办好如何处置他们。因而,我们假定偶然大概会必要统一天纪录两组学分。我们如何处置呢?假如呈现这类情形,成绩其实不难明决。只需对处置数据的体例作一点小的变动,便可使统一日期上有多个事务而不会引发成绩:
1)增添一个列到event表,并用它来给表中每一个纪录分派一个独一的编号。实践上这就给了每一个事务一个独一的ID号,因而我们称该列为event_id列。(假如以为这仿佛是做傻事,可看一下-2中的学分簿,个中已有这个特性了。事务ID恰好与学分簿分数矩阵中列号类似。这个编号大概没有明晰地写在那儿并标上“事务ID,”可是它的确在那儿。)
2)当向score表中输出学分时,输出的是事务ID而不是日期。这些改动的了局如-6所示。如今毗连score和event表时,用的是事务ID而不是日期,并且不但用event表来决意每一个学分的范例,并且还用它来决意其日期。而且在event表中不再有日期必需独一这个限定,而独一的是事务ID。这暗示统一天能够有一打测试和检验,并且可以在纪录里边间接保留它们。(毫无疑问,先生们听到这个必定满身抖动。)不幸的是,从人的概念来看,-6中的表计划较前一个更不克不及使人中意。score表也更加笼统一些,由于它包括的从直不雅上能够了解的列更少。而-4中此表的计划直不雅且简单了解,由于谁人score表具有日期和学分范例的列。以后的score表如-6所示,日期和学分范例的列都没有了。这极年夜地往除作为人可以很简单思索的统统。谁但愿看到个中有“事务ID”的score表?假如有的话,也不代表我们年夜多半人。

此时,可看到可以电子化地完成学分纪录,且在付与学分品级时不用做各类有趣的手工盘算。可是,在思索了怎样实践在一个数据库中暗示学分信息后,又会被如何笼统和拆分构成学分信息的暗示难住了。天然会发生一个成绩:“基本不利用数据库大概会更好一些?也许MySQL不合适我?”正如您所推测的那样,笔者将从否认的方面临这个成绩举行回覆,不然这本书就没需要再往下写了。不外,在思索怎样做一件事情时,招考虑各类情形并发问是不是最好不利用数据库体系(如MySQL)而利用一些其余器材(如电子表格等):
■学分簿有行和列,而电子表格也有。这使学分簿和电子表格在观点上和表面上都十分相似。
■电子表格可以完成盘算,能够使用一个盘算字段来累计每一个先生的学分。可是,要对检验和测试举行加权大概有点贫苦,但这也是能够办失掉的。另外一方面,假如但愿只检察某部分数据(如只检察学分或测试),举行诸如男孩与女孩的对照,或以一种天真的体例显现算计信息等,情形又年夜有分歧了。电子表格的功效显得要差一些,而干系数据库体系完成这些事情相称简单。别的要思索的一点是为了在干系数据库中举行暗示而对数据举行笼统和分化,这个成绩其实不真的那末难以对付。只需思索布置数据库使其不会以一种对您但愿做的事偶然义的体例来暗示数据便可。可是,在断定了暗示体例以后,就要靠数据库引擎来和谐和暗示数据了。您一定不会但愿将它视为一堆分崩离析的器材。
比方,在从score表中检索学分时,不但愿看到事务ID;但但愿看到日期。这没有甚么成绩。数据库将会依据事务ID从event表中查找出日期。您还大概想要看看是检验的学分或测试的学分。这也不成成绩。数据库将用不异的办法查找出学分范例,也是使用事务ID。请记着,这就是如像MySQL如许的干系数据库的上风地点,即,使一样器材与另外一样器材相干联,以便从多个来历得出信息并以您实践想看到的情势供应出来。在学分保留数据的情形中,MySQL的确使用事务ID将信息组合到了一同,而无需野生来完成这件事。
如今我们先来看看,怎样使MySQL完成这类将一个器材与另外一个器材相接洽的事情。
假定但愿看到1999年9月23号的学分,针对某个特定日期中给出的事务的学分查询以下所示:

相称吓人,是吗?这个查询经由过程将score表的纪录与event表的纪录毗连(联系关系)来检索先生名、日期、学分和学分的范例。其了局以下所示:

您一定注重到了,它与-4中给出的表计划不异,并且不必要晓得事务ID便可得出这个了局,只需指出感乐趣的日期并让MySQL查找出哪一个学分纪录具有该日期便可。假如您一向忧虑笼统和分化会使我们丧失一些器材的话,看到这个天下,就不会有这类忧虑了。
固然,在思索过查询后,您还大概对其他其余器材发生忧虑。即,这个查询看上往有点长而且也有点庞大;是否是做了良多事情写出如许的器材只是为了查找某个给定日期的学分?是的,的确是如许。可是,在每次想要公布一个查询时,有几种办法能够制止键进多行的SQL。一样平常情形下,一旦您决意怎样实行如许一个查询并将它保留起来后,就能够按必要屡次实行它。我们将在1.5节“与mysql交互的技能”中先容如何完成这项事情。
在上述查询的先容中,我们有点超前了。不外,这个查询比起我们要实践用来得出学分的查询是有点复杂了。缘故原由是,我们还要对表的计划作更多的修正。我们将接纳一个独一的先生ID,而不在score表中纪录先生名。(即,我们将利用来自学分簿的“ID”列的值而不是来自“Name”列的值。)然后,创立另外一个称为student的表来寄存name和student_id列(见-7)。

为何要作出这类修正呢?只要一个缘故原由,大概有两个先生有不异的名字。接纳独一的先生ID号可匡助辨别他们的学分。(这与使用独一的事务ID而不是日期来分辩出不异日期的测试或检验完整相似。)在对表的计划作了如许的修正后,实践用来取得给定日期的学分查询变得更加庞大了一些,这个查询以下:

假如您不克不及当即分明地读懂这个查询的意义的话,也不用忧虑。在进一步深切这个教程以后,就可以看懂这个查询了。将会从-7中注重到,在student表中增添了点学分簿中没有的器材。它包括了一本性别列。这即可以做一些复杂的事变,如对班级中男孩和女孩的人数计数;也能够做一些更加庞大的事变,如对照男孩和女孩的学分。我们已计划完了学分保留的几近一切的表。如今只必要别的
一个表来纪录缺勤情形便可。这个表的内容绝对较为直不雅,即,一个先生ID号和一个日期(见-8)。表中的每行暗示特定的先生在
给定的日期出勤。在学分时段末,我们将挪用MySQL的计数功效来汇总此表的内容,以便得出每一个先生的出勤数。

既然如今已晓得学分保留的各个表的布局,如今能够创立它们了。student表的CREATETABLE语句以下:

将上述语句键进mysql或实行以下外壳程序命令:

CREATETABLE语句创立了一个名为student的表,它含有三列,分离为:name、sex和student_id。name是一个可变长的字符串列,最多可寄存20个字符。这个名字的暗示比汗青联盟表中所用的暗示要复杂,它只用了单一的列而不是分离的名和姓列。这是由于我们已事后晓得,不存在无需做别的的事情就使得在多个列上事情得更好的查询样例。sex暗示先生是男孩仍是女孩。这是一个ENUM(列举)列,暗示只能取明白地列在申明中的值之一,这里列出的值为:“F”和“M”,分离暗示女和男。在某列只具有一组无限值时,ENUM范例十分有效。我们能够用CHAR(1)来取代它,可是ENUM更明白划定了列能够取甚么值。假如对包含一个ENUM列的表公布一条DESCRIBEtbl_name语句,MySQL将切实地显现可取的值有哪些。特地说一下,ENUM列中的值纷歧定只是单个字符。此列还能够界说为ENUM(‘female’,‘male’)。
student_id为一个整数型列,它将包括独一的ID号。一般,也许会从一其中心材料来历处(如黉舍办公室)获得先生的ID号,但在这里是我们本人定的。固然student_id列只包括一个数,但其界说包含几个部分:
■INT申明此列的值必需取整数(即无小数部分)。
■UNSIGNED不同意正数。
■NOTNULL暗示此列的值必需填进。(任何先生都必需有一个ID号。)
■AUTO_INCREMENT是MySQL中的一个特别的属性。其感化为:假如在创立一个新的student表纪录时漏掉了student_id的值(或为NULL),MySQL主动地天生一个年夜于以后此列中最年夜值的独一ID号。在录退学生表时将用到这个这特征,录退学生表时能够只给出name和sex的值,让MySQL主动天生student_id列值。
■PRIMARYKEY暗示响应列的值为疾速查找举行索引,而且列中的每一个值都必需是唯一的。如许可避免统一名字的ID呈现两次,这关于先生ID号来讲是一个必需的特征。(不但云云,并且MySQL还请求每一个AUTO_INCREMENT列都具有一个唯一索引。)假如您不睬解AUTO_INCREMENT和PRIMARYKEY的寄义,只需将其想像为一种为每一个先生发生ID号的把戏办法便可。除请求值独一外,没有甚么其余器材。请注重:假如的确盘算从黉舍办公室获得先生ID号而不是主动天生它们,则能够按不异的办法界说student_id列,只不外不界说AUTO_INCREMENT属性便可。event表以下界说:

将此语句键进mysql或实行以下外壳程序的命令:

一切列都界说为NOTNULL,由于它们中任何一个值都不克不及省略。date列存储尺度的MySQLDATE日期值,格局为“YYYY-MM-DD”(起首是年)。type代表学分范例。像student表中的sex一样,type也是一个列举列。所同意的值为“T”和“Q”,分离暗示“测试”和“检验”。event_id是一个AUTO_INCREMENT列,相似于student表中的student_id列。接纳AUTO_INCREMENT同意天生独一的事务ID值。正如student表中的student_id列一样,与值的唯一性比拟,某个特定的值其实不主要。score表以下界说:

将此语句键进mysql或实行以下外壳程序的命令:

score为一个INT(整型)列。即,假定学分值老是为一个整数。假如但愿使学分值具有小数部分,如58.5,应当接纳浮点列范例,如FLOAT或DECIMAL。student_id列和event_id列都是整型,分离暗示每一个学分所对应的先生和事务。经由过程使用它们来毗连到student和event表,我们可以晓得先生名和事务的日期。我们将两个列构成了PRIMARYKEY。这包管我们不会对统一检验或测试反复一个先生的学分。并且,如许还很简单在今后变动某个学分。比方,在发明学分录进错时,能够在使用MySQL的REPLACE语句放进一个新纪录,交换失落旧的纪录。不必要实行DELETE语句与INSERT语句;MySQL主动替我们做了。请注重,它是唯一的event_id和student_id的组合。在score表中,二者本身都大概不唯一。一个event_id值可有多个学分纪录(每一个先生对应一个纪录),而每一个student_id值都对应多个纪录(每一个检验和测试有一个纪录)。用于缺勤情形的absence表以下界说:

将此语句键进mysql或实行以下外壳程序的命令:

student_id和date列二者都界说为NOTNULL,不同意省略值。应界说这两列的组合为主键,以避免不妥心创建了反复的纪录。主要的是不要对统一天某个先生的缺旷举行反复计数。
1.4.7增添新纪录
至此,我们的数据库及其表都已创立了,鄙人一节“检索信息”中,我们将看到如何从数据库中掏出数据。如今我们先将一些数据放进表中。在数据库中到场数占有几种办法。可经由过程公布INSERT语句手工将纪录拔出某个表中。还能够经由过程从某个文件读取它们来增添纪录,在这个文件中,纪录既能够是使用LOADDATA语句或mysqlimport有用程序装进的原始数据值,也能够是事后写成可馈进mysql的INSERT语句的情势。本节先容将纪录拔出表的每种办法。您所应做的是练习各类办法以了然它们是怎样起感化的。然后到本节停止处运转那儿给出的命令来扫除表偏重装它们。如许做,可以包管表中含有作者撰写下一节时所处置的不异纪录,您也能失掉不异的了局。让我们入手下手使用INSERT语句来增添纪录,这是一个SQL语句,必要为它指定但愿拔出数据行的表或将值按行放进的表。INSERT语句具有几种情势:
■可指定一切列的值

比方:

“INTO”一词自MySQL3.22.5以来是可选的。(这一点对其他情势的INSERT语句同样成立。)VALUES表必需包括表中每列的值,而且按表中列的寄存序次给出。(一样平常,这就是创立表时列的界说序次。假如不克不及一定的话,可以使用DESCRIBEtbl_name来检察这个序次。)在MySQL中,可用单引号或双引号将串和日期值括起来。下面例子中的NULL值是用于student和event表中的AUTO_INCREMENT列的。(拔出“毛病”的值将招致下一个student_id或event_id号的主动天生。)自3.22.5以来的MySQL版本同意经由过程指定多个值的列表,使用单个的INSERT语句将几行拔出一个表中,以下所示:

比方:

这比多个INSERT语句的键进事情要少,并且服务器实行的效力也更高。
■能够给出要赋值的谁人列,然后再列出值。这关于但愿创建只要几个列必要初始设置的纪录是很有效的。

比方:

 自MySQL3.22.5以来,这类情势的INSERT也同意多个值表:

在列的列表中未给着名称的列都将付与缺省值。
■自MySQL3.22.10以来,能够col_name=value的情势给出列和值。

比方:

在SET子句中未定名的行都付与一个缺省值。利用这类情势的INSERT语句不克不及拔出多行。将纪录装到表中的另外一种办法是间接从文件读取数据值。能够用LOADDATA语句或用mysqlimport有用程序来装进纪录。LOADDATA语句起批量装载程序的感化,它从一个文件中读取数据。可在mysql内利用它,以下所示:

该语句读取位于客户机受骗前目次中数据文件member.txt的内容,并将其发送到服务器装进member表。假如您的MySQL版本低于3.22.15,则LOADDATALOCAL不起感化,由于当时从客户机读取数据的才能是在LOADDATA上的。(没有LOCAL关头字,被读取的文件必需位于服务器主机上,而且必要年夜多半MySQL用户都不具有的服务器会见权限。)缺省时,LOADDATA语句假定列值由tab键分开,而行则以换行符停止。还假定各个值是按列在表中的寄存序次给出的。也有大概必要读取其他格局的文件,大概指定分歧的列次
序。更具体的内容请参阅附录D的LOADDATA的条目。mysqlimport有用程序起LOADDATA的命令行接口的感化。从外壳程序挪用mysqlimport,它天生一个LOADDATA语句:

mysqlimport天生一个LOADDATA语句,此语句使member.txt文件被装进member表。假如您的MySQL版本低于3.22.15,这个有用程序不起感化,由于--local选项必要LOADDATALOCAL。正如利用mysql一样,假如您必要指定毗连参数,可在命令行上数据库名前指定它们。mysqlimport从数据文件名中导出表名(它将文件名第一个圆点前的一切字符作为表名)。比方,member.txt将被装进member表,而president.txt将被装进president表。假如您有多个必要装进单个表的文件,应细心地选择文件名,不然mysqlimport将不克不及利用准确的表名。关于如像member1.txt与member2.txt如许的文件名,mysqlimport将会以为响应的表名为
member1和member2。不外,可使用如member.1.txt和member.2.txt或member.txt1和member.txt2如许的文件名。在试用过这些纪录追加的办法后,应当扫除各个表偏重新装载它们,以便它们的内容与下一节假定的内容不异。从外壳程序实行以下命令:

每一个文件都含有一个删除大概已经拔出到表中的纪录的DELETE语句,后跟一组INSERT语句以初始化表的内容。假如不但愿分离键进这些命令,可试一下以下语句:

1.4.8检索信息
如今各个表已创立并装无数据了,因而让我们来看看能够对这些数据做点甚么。SELECT语句同意以一样平常的或特别的体例检索和显现表中的信息。它能够显现表的全部内容:

大概只显现单个行中单个列的内容:

SELECT语句有几个子句(部件),能够依据必要用来检索感乐趣的信息。每一个子句都可复杂、可庞大,从而SELECT作为一个总的语句也繁简咸宜。可是,能够宁神,本书中不会有花一个钟头来编写的长达数页的查询。(我在书中看到有很长的查询时,一样平常会当即跳过它们,因而我猜您也会如许。)SELECT语句的一样平常情势为:SELECT要选择的器材FROM一个或多个表WHERE数据必需满意的前提记着,SQL为一个自在格局的言语,因而在您编写SELECT查询时,语句的断行不用严厉按照本书。
为了编写SELECT语句,只需指定必要检索甚么,然后再选择某些子句便可。方才给出的子句“FROM”、“WHERE”是最经常使用的,另有一些其他的子句,如GROUPBY、ORDERBY和LIMIT等。FROM子句一样平常都要给出,可是假如不从表当选择数据,也可不给出。比方,以下查询只显现某些能够间接盘算而不用援用任何表的表达式的值,因而不必要用FROM子句:

在的确利用一个FROM子句指定了要从个中检索数据的表时,SELECT语句的最“一般”的格局是检索一切内容。用“*”来暗示“一切列”。上面的查询将从student表中检索一切行并显现:

各列按它们MySQL在表中寄存的序次呈现。该序次与公布DESCRIBEstudent语句时显现的列序次不异。(例子开端的“...”暗示此查询前往的输入行比这里显现的还要多。)可明白地定名但愿失掉的一列或多列。假如只选择先生名,公布以下语句:

假如名字不止一列,可用逗号分开它们。以下的语句与SELECT*FROMstudent等价,只是明白地指出了每列:

可按恣意序次给出列:

假如有需要,统一列乃至也能够给出屡次,固然如许做通常为没成心义的。列名在MySQL中不辨别巨细写的。上面的查询是同等的:

数据库和表名有大概辨别巨细写的;这有取决服务器主机上利用的文件体系。在UNIX上运转的服务器对数据库名和表名是辨别巨细写的,由于UNIX的文件名是辨别巨细写的。Windows的文件名不辨别巨细写,因而运转在Windows上的服务器对数据库名和表名不辨别
巨细写。MySQL同意您一次从多个表当选择列。我们将这个内容留到“从多个表中检索信息”大节往先容。
1.指定检索前提
为了限定SELECT语句检索出来的纪录集,可以使用WHERE子句,它给出选择行的前提。可经由过程查找满意各类前提的列值来选择行。
可查找数字值:

也能够查找串值。(注重,一样平常串的对照是不辨别巨细写的。)

能够查找日期值:

可搜刮组合值:

WHERE子句中的表达式可以使用表1-1中的算术运算符、表1-2的对照运算符和表1-3的逻辑运算符。还可使用圆括号将一个表达式分红几个部分。可以使用常量、表列和函数来完成运算。在本教程的查询中,我们偶然利用几个MySQL函数,可是MySQL的函数远不止这里
给出的这些。请参阅附录C,那边给出了一切MySQL函数的清单。


 在用表达式暗示一个必要逻辑运算的查询时,要注重别搅浑逻辑与运算符与我们寻常利用的“与”的寄义。假设但愿查找“出身在Virginia的总统与出身在Maryland的总统”。应当注重如何暗示“与”的干系,能写成以下的查询吗?

错了,由于这个查询的意义是“选择既出身在Virginia又出身在Maryland的总统”,不成能有同时出身在两个地址的总统,因而这个查询偶然义。在英语中,能够用“and”暗示这类选择,但在SQL中,应当用OR来毗连两个前提,以下所示:


这偶然是能够发觉到的,不单单是在编写本人的查询时能够发觉到,并且在为别人编写查询时也能够晓得。最好是在别人形貌想要检索甚么时细心听,但纷歧定利用不异的逻辑运算符将别人的形貌转录成SQL语句。对方才所举的例子,准确的英语等价形貌为“选择出身在Virginia大概出身在Maryland的总统。”
2.NULL值
NULL值是特别的;由于它代表“无值”。不成能以评价两个已知值的不异体例来将它与已知值举行评价。假如试图与一般的算术对照运算符一道利用NULL,其了局是不决义的:
乐观 该用户已被删除
9#
发表于 2015-3-24 22:48:17 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 19:33:06 | 只看该作者
总感觉自己还是不会SQL
不帅 该用户已被删除
7#
发表于 2015-3-11 03:11:32 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
若天明 该用户已被删除
6#
发表于 2015-3-2 07:48:31 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
精灵巫婆 该用户已被删除
5#
发表于 2015-2-11 08:56:56 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
山那边是海 该用户已被删除
地板
发表于 2015-2-5 09:46:29 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
飘灵儿 该用户已被删除
板凳
发表于 2015-1-27 14:11:50 | 只看该作者
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-19 09:57:32 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 23:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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