认证主体:李**(实名认证)
IP属地:贵州
下载本文档
1、SQL数据据操作基础础(初级) 1 netnoova 于于 99-6-277 13:57:002 加贴贴在 数据据库探讨:为了建立交交互站点,你你需要使用用数据库来来存储来自自访问者的的信息。例例如,你要要建立一个个职业介绍绍服务的站站点,你就就需要存储储诸如个人人简历,所所感兴趣的的工作等等等这样的信信息。创建建动态网叶叶也需要使使用数据库库,如果你你想显示符符合来访者者要求的最最好的工作作,你就需需要从数据据库中取出出这份工作作的信息。你将会发发现,在许许多情况下下需要使用用数据库。在这一章里里,你将学学会怎样使使用“结构构化查询语语言”(SSQL来来操作数据据库。SQQL语言是是数据库的
2、的标准语言言。在Acctivee Sevver PPagess 中,无无论何时你你要访问一一个数据库库,你就要要使用SQQL语言。因此,掌掌握好SQQL对ASSP编程是是非常重要要的。注意:你可以把“SQL”读作“ssequeel”,也也可以按单单个字母的的读音读作作SQL。 两两种发音都都是正确的的,每种发发音各有大大量的支持持者。在本本书里,认认为“SQQL”读作作“seqquel”。通过这一章章的学习,你你将理解怎怎样用SQQL实现数数据库查询询,你将学学会怎样使使用这种查查询从数据据表中取出出信息,最最后,你将将学会怎样样设计和建建立自己的的数据库。注意:通过下面几几章对SQQL的介绍
3、绍,你将对对SQL有有足够的了了解,从而而可以有效效地使用AActivve Seever Pagees。但是是,SQLL是一种复复杂的语言言,本书不不可能包括括它的全部部细节。要要全面掌握握SQL语语言,你需需要学习在在Micrrosofft SQQL Seever 中使用SSQL。你你可以到附附近的书店店去买一本本Micrrosofft SQQL Seever 6.5。SQL介绍绍:本书假设你你是在SQQL操作MMicroosoftt SQLL Sevver 的的数据库。你也可以以用SQLL操作许多多其它类型型的数据库库。SQLL是操作数数据库的标标准语言。(事实上上,关于SSQL语言言有一
4、个专专门的ANNSI标准准注意:不要在你的的站点上试试图用Miicrossoft Acceess代替替Micrrosofft SQQL Seever。SQL Seveer可以同同时服务于于许多用户户,如果你你希望你的的站点有较较高的访问问率,MSS Acccess是是不能胜任任的。在学习SQQL的细节节之前,你你需要理解解它的两大大特点。一一个特点容容易掌握,另另一个掌握握起来有点点困难。第一个特点点是所有SSQL数据据库中的数数据都存储储在表中。一个表由由行和列组组成。例如如,下面这这个简单的的表包括nname 和e-mmail addrress:Name Emaiil AdddresssB
6、il地址,但但知道你能能这样做总总是好的,也也许有一天天你会有这这样的需要要。你的数据库库很有可能能包含几十十个表,所所有存储在在你数据库库中的信息息都被存储储在这些表表中。当你你考虑怎样样把信息存存储在数据据库中时,你你应该考虑虑怎样把它它们存储在在表中。SQL的第第二个特点点有些难于于掌握。这这种语言被被设计为不不允许你按按照某种特特定的顺序序来取出记记录,因为为这样做会会降低SQQL Seever取取记录的效效率。使用用SQL,你你只能按查查询条件来来读取记录录。当考虑如何何从表中取取出记录时时,自然会会想到按记记录的位置置读取它们们。例如,也也许你会尝尝试通过一一个循环,逐逐个记录地地
7、扫描,来来选出特定定的记录。在使用SSQL时,你你必须训练练自己,不不要有这种种思路。假如你想选选出所有的的名字是“Billl Gattes”的的记录,如如果使用传传统的编程程语言,你你也许会构构造一个循循环,逐个个查看表中中的记录,看看名字域是是否是“BBill Gatees”。这种选择记记录的方法法是可行的的,但是效效率不高。使用SQQL,你只只要说,“选择所有有名字域等等于Billl Gaates的的记录”,SSQL就会会为你选出出所有符合合条件的记记录。SQQL会确定定实现查询询的最佳方方法。建设你想取取出表中的的前十个记记录。使用用传统的编编程语言,你你可以做一一个循环,取取出前十个
8、个记录后结结束循环。但使用标标准的SQQL查询,这这是不可能能实现的。从SQLL的角度来来说,在一一个表中不不存在前十十个记录这这种概念。开始时,当当你知道你你不能用SSQL实现现某些你感感觉应该能能实现的功功能,你会会受到挫折折。你也许许会以头撞撞墙甚至想想写恶毒的的信件给SSQL的设设计者们。但后来你你会认识到到,SQLL的这个特特点不仅不不是个限制制,反而是是其长处。因为SQQL不根据据位置来读读取记录,它它读取记录录可以很快快。综上所述,SSQL有两两个特点:所有数据据存储在表表中,从SSQL的角角度来说,表表中的记录录没有顺序序。在下一一节,你将将学会怎样样用SQLL从表中选选择特殊
9、的的记录。使用SQLL从表中取取记录。SQL的主主要功能之之一是实现现数据库查查询。如果果你熟悉IInterrnet 引擎,那那么你已经经熟悉查询询了。你使使用查询来来取得满足足特定条件件的信息。例如,如如果你想找找到有ASSP信息的的全部站点点,你可以以连接到 Yahooo!并执执行一个对对Actiive SSeverr Pagges的搜搜索。在你你输入这个个查询后,你你会收到一一个列表,表表中包括所所有其描述述中包含搜搜索表达式式的站点。多数Intterneet 引擎擎允许逻辑辑查询。在在逻辑查询询中,你可可以包括特特殊的运算算符如ANND、ORR和NOTT,你使用用这些运算算符来选择择特
10、定的记记录。例如如,你可以以用ANDD来限制查查询结果。如果你执执行一个对对Actiive SSeverr Pagges AAND SSQL的搜搜索。你将将得到其描描述中同时时包含Acctivee Sevver PPagess 和SQQL的记录录。当你需需要限制查查询结果时时,你可以以使用ANND。如果你需要要扩展查询询的结果,你你可以使用用逻辑操作作符OR。例如,如如果你执行行一个搜索索,搜索所所有的其描描述中包含含Actiive SSeverr Pagges OOR SQQL的站点点,你收到到的列表中中将包括所所有其描述述中同时包包含两个表表达式或其其中任何一一个表达式式的站点。如果你想从
11、从搜索结果果中排除特特定的站点点,你可以以使用NOOT。例如如,查询“Actiive SSeverr Pagges ”AND NOT “SQLL”将返回回一个列表表,列表中中的站点包包含Acttive Seveer Paages,但但不包含SSQL。当当必须排除除特定的记记录时,你你可以使用用NOT。用SQL执执行的查询询与用Innternnet搜索索引擎执行行的搜索非非常相似。 当你执执行一个SSQL查询询时,通过过使用包括括逻辑运算算符的查询询条件,你你可以得到到一个记录录列表。此此时查询结结果是来自自一个或多多个表。SQL查询询的句法非非常简单。假设有一一个名为eemaill_tabbl
12、e 的的表,包含含名字和地地址两个字字段,要得得到Billl Gaates 的e_mmail地地址,你可可以使用下下面的查询询:SELECCT emmail fromm emaail_ttablee WHEERE nname=Billl Gaates当这个查询询执行时,就就从名为eemaill_tabble的表表中读取BBill Gatees的e_maill 地址。这个简单单的语句包包括三部分分: SELLECT语语句的第一一部分指名名要选取的的列。在此此例中,只只有emaail列被被选取。当当执行 时时,只显示示emaiil列的值值 billlgm。 SELLECTTT语句的第第二部份指指明
13、要从哪哪个(些)表表中查询数数据。在此此例中,要要查询的表表名为emmail_tablle 。 最后,SSELECCT语句的的WHERRE子句指指明要选择择满足什么么条件的记记录。在此此例中,查查询条件为为只有naame列的的值为Biill GGatess 的记录录才被选取取。Bill Gatees很有可可能拥有不不止一个eemaill地址。如如果表中包包含Billl Gaates的的多个emmail地地址。用上上述的SEELECTT语句可以以读取他所所有的emmail地地址。SEELECTT语句从表表中取出所所有namme字段值值为Billl Gaates 的记录的的emaiil 字段段的值
14、。前面说过,查查询可以在在查询条件件中包含逻逻辑运算符符。假如你你想读取BBill Gatees 或CClintton总统统的所有eemaill地址,你你可以使用用下面的查查询语句:SELECCT emmail FROMM emaail_ttablee WHEERE nname=Billl Gaates OR name=preesideent CClintton此例中的查查询条件比比前一个复复杂了一点点。这个语语句从表eemaill_tabble中选选出所有nname列列为Billl Gaates或或pressidennt Cllintoon的记录录。如果表表中含有BBill Gatees或p
15、rresiddent Clinnton的的多个地址址,所有的的地址都被被读取。SELECCT语句的的结构看起起来很直观观。如果你你请一个朋朋友从一个个表中为你你选择一组组记录,你你也许以非非常相似的的方式提出出你的要求求。在SQQL SEELECTT语句中,你你“SELLECT特特定的列FFROM一一个表WHHERE某某些列满足足一个特定定的条件”。下一节将介介绍怎样执执行SQLL查询来选选取记录。这将帮助助你熟悉用用SELEECT语句句从表中取取数据的各各种不同方方法。SQL数据据操作基础础(初级) 2 netnoova 于于 99-6-277 13:57:338 加贴贴在 数据据库探讨:使
16、用ISQQL执行SSELECCT查询当你安装SSQL SSeverr时,你同同时安装了了一个叫作作ISQLL/w的应应用程序。ISQLL/w允许许你执行交交互的SQQL查询。在把查询询包括到你你的ASPP网页中之之前,用IISQL/w对其进进行测试是是非常有用用的。注意:在这本书的的第一部份份,你学习习了怎样安安装和配置置Micrrosofft SQQL Seever 。如果没没有安装SSQL SSeverr或者SQQL Seever不不能运行,请请参阅第三三章“安装装和使用SSQL SSeverr”。选择任务上上SQL Seveer程序组组中的ISSQL_ww以启动该该程序。程程序启动时时,
17、首先会会出现一个个对话框,要要求输入服服务器信息息和登录信信息(见图图10.11)。在SSeverr框中,输输入你的SSQL服务务器的名字字。如果服服务器正运运行在本地地计算机上上,服务器器名字就是是你计算机机的名字。在登录信信息框中,输输入一个登登录帐号和和密码或选选择使用“可信连接接”,然后后单击Coonnecct按钮。 图10。11注意:如果你将SSQL SSeverr配置为使使用完整安安全或混合合安全,那那么你可以以使用可信信连接。如如果你使用用标准安全全,你则需需要提供用用户帐号和和密码。要要了解更多多信息,参参见第三章章。如果一切正正常,在你你单击连接接按钮后会会出现一个个查询窗口
18、口,如图110.2所所示。(如如果有异常常,请参考考第三章) 图10.22在执行查询询之前,你你需要选择择数据库。安装 SSQL SSeverr时你已为为自己创建建了一个数数据库,SSQL SSeverr还有许多多系统数据据库,如mmasteer,moodel,mmsdb,和和temppdb。方便的是,SSQL SSeverr带有一个个特殊的名名为pubbs的例子子数据库。库 puubs中包包含供一个个虚拟的出出版商使用用的各个表表。文档中中所有的例例子程序都都是针对这这个库来设设计的。本本书中的许许多例子也也使用这个个数据库。在查询窗口口顶部的DDB下拉框框中选择数数据库puubs,这这样你
19、就选选择了数据据库。你所所有的查询询都将针对对这个库中中的各个表表来执行。现在你可可以执行你你的第一个个查询了。这真让人人兴奋!你的第一个个查询将针针对一个名名为auttrorss的表,表表中包含所所有为某个个虚拟出版版商工作的的作者的相相关数据。单击查询询窗口并输输入以下的的语句:SELECCT phhone FROMM autthorss WHEERE aau_naame=Ringger输入完成后后,单击执执行查询按按钮(一个个绿色三角角形,看起起来像VCCR播放键键)。单击击此按钮后后,任何出出现在查询询窗口中的的语句均会会被执行。查询窗口口会自动变变成结果显显示窗口,你你可以看到到查询
20、的结结果(见图图10.33)。你看到的查查询结果也也许与图110.3所所示的不同同。在SQQL Seever的的不同版本本中,库ppubs中中的数据会会有所不同同。对SQQL Seever 6.5来来说,将会会找到两条条记录。结结果显示窗窗口中应显显示如下内内容:phonee.801 8826_00752801 8826_00752(2 roow(s) afffecteed)图10.33你所执行的的SELEECT语句句从表auuthorrs中取出出所有名字字为Rinnger的的作者的电电话号码。你通过在在WHERRE子句中中使用特殊殊的选择条条件来限制制查询的结结果。你也也可以忽略略选择条件件
21、,从表中中取出所有有作者的电电话号码。要做到这这一点,单单击Queery标签签,返回到到查询窗口口,输入以以下的SEELECTT语句:SELECCT Phhone FROMM autthorss这个查询执执行后,会会取出表aauthoors中的的所有电话话号码(没没有特定的的顺序)。如果表aauthoors中包包含一百个个电话号码码,会有一一百个记录录被取出,如如果表中有有十亿个电电话号码,这这十亿条记记录都会被被取出(这这也许需要要一些时间间)。表authhrs的字字段包括姓姓,名字,电电话号码,地地址,城市市,州和邮邮政编码。通过在SSELECCT语句的的第一部份份指定它们们,你可以以从表
22、中取取出任何一一个字段。你可以在在一个SEELECTT语句中一一次取出多多个字段,比比如:SELECCT auu_fnaame ,au_llnamee, phhone FROMM autthorss这个SELLECT语语句执行后后,将取出出这三个列列的所有值值。下面是是这个查询询的结果的的一个示例例(为了节节省纸张,只只显示查询询结果的一一部分,其其余记录用用省略号代代替):au_fnname au_llnamee phoone .Johnsson WWhitee 4088 4966_72223Marjoorie Greeen 4115 9886_70020Cheryyl Caarsonn 4
23、155 5488_77223Michaael OOLeaary 4408 2286_22428 (23 rrow(ss) afffectted)在SELEECT语句句中,你需需要列出多多少个字段段,你就可可以列出多多少。不要要忘了把字字段名用逗逗号隔开。你也可以以用星号(*)从一个个表中取出出所有的字字段。这里里有一个使使用星号的的例子:SELECCT * FROMM autthorss这个SELLECT语语句执行后后,表中的的所有字段段的值都被被取出。你你会发现你你将在SQQL查询中中频繁使用用星号。技巧:你可以使用用星号来查查看一个表表的所有列列的名字。要做到这这一点,只只需要在执执行完S
24、EELECTT语句后看看一下查询询结果的列列标题。操作多个表表到现在为止止,你只尝尝试了用一一句SQLL查询从一一个表中取取出数据。你也可以以用一个SSELECCT语句同同时从多个个表中取出出数据,只只需在SEELECTT语句的FFROM从从句中列出出要从中取取出数据的的表名称即即可:SELECCT auu_lnaame ,titlle FRROM aauthoors, titlles 这个SELLECT语语句执行时时,同时从从表autthorss和表tiitless中取出数数据。从表表authhors中中取出所有有的作者名名字,从表表titlles中取取出所有的的书名。在在ISQLL/w程序
25、序中执行这这个查询,看看一下查询询结果。你你会发现一一些奇怪的的出乎意料料的情况:作者的名名字并没有有和它们所所著的书相相匹配,而而是出现了了作者名字字和书名的的所有可能能的组合,这这也许不是是你所希望望见到的。出了什么差差错?问题题在于你没没有指明这这两个表之之间的关系系。你没有有通过任何何方式告诉诉SQL如如何把表和和表关联在在一起。由由于不知道道如何关联联两个表,服服务器只能能简单地返返回取自两两个表中的的记录的所所有可能组组合。要从两个表表中选出有有意义的记记录组合,你你需要通过过建立两表表中字段的的关系来关关联两个表表。要做到到这一点的的途径之一一是创建第第三个表,专专门用来描描述另
26、外两两个表的字字段之间的的关系。表authhors有有一个名为为au_iid的字段段,包含有有每个作者者的唯一标标识。表ttitlees有一个个名为tiitle_id的字字段,包含含每个书名名的唯一标标识。如果果你能在字字段au_id和字字段tittle_iid 之间间建立一个个关系,你你就可以关关联这两个个表。数据据库pubbs中有一一个名为ttitleeauthhor的表表,正是用用来完成这这个工作。表中的每每个记录包包括两个字字段,用来来把表tiitless和表auuthorrs关联在在一起。下下面的SEELECTT语句使用用了这三个个表以得到到正确的结结果:SELECCT auu_na
29、第三个表表来指明这这种关系。但是,在许许多情况下下,两个表表之间的关关系并不复复杂。比如如你需要指指明表tiitless和表puublissherss之间的关关系。因为为一个书名名不可能与与多个出版版商相匹配配,你不需需要通过第第三个表来来指明这两两个表之间间的关系。要指明表表titlles和表表publlisheers之间间的关系,你你只要让这这两个表有有一个公共共的字段就就可以了。在数据库库pubss中,表ttitlees和表ppubliisherrs都有一一个名为ppub_iid的字段段。如果你你想得到书书名及其出出版商的一一个列表,你你可以使用用如下的语语句:SELECCT tiitl
31、从一个表表中取出字字段值时,该该值与创建建该表时所所定义的字字段名联系系在一起。如果你从从表autthorss中选择所所有的作者者名字,所所有的值将将会与字段段名au_lnamme相联系系。但是在在某些情况况下,你需需要对字段段名进行操操作。在SSELECCT语句中中,你可以以在缺省字字段名后面面仅跟一个个新名字来来取代它。例如,可可以用一个个更直观易易读的名字字Authhor LLast Namee来代替字字段名auu_lnaame:SELECCT auu_lnaame Authhor LLast Namee FRROM aauthoors当这个SEELECTT语句执行行时,来自自字段auu
32、_lnaame的值值会与“AAuthoor Laast NName”相联系。查询结果果可能是这这样:Authoor Laast NName . WhiteeGreennCarsoonOLeaaryStraiight (23 rrow(ss) afffectted)注意字段标标题不再是是au_llnamee,而是被被Authhor LLast Namee所取代。你也可以通通过执行运运算,来操操作从一个个表返回的的字段值。例如,如如果你想把把表tittles中中的所有书书的价格加加倍,你可可以使用下下面的SEELECTT语句:SELECCT prrice*2 FRROM ttitlees 当这个查
33、询询执行时,每每本书的价价格从表中中取出时都都会加倍。但是,通通过这种途途径操作字字段不会改改变存储在在表中的书书价。对字字段的运算算只会影响响SELEECT语句句的输出,而而不会影响响表中的数数据。为了了同时显示示书的原始始价格和涨涨价后的新新价格,你你可以使用用下面的查查询:SELECCT prrice Oriiginaal prrice, prrice*2 NNew ppricee FRROM ttitlees当数据从表表titlles中取取出时,原原始价格显显示在标题题Origginall priice下面面,加倍后后的价格显显示在标题题New pricce下面。结果可能能是这样:or
34、igiinal pricce neew prrice.39.988 11.95 223.900 5.98 39.998 (18 rrow(ss) afffectted)你可以使用用大多数标标准的数学学运算符来来操作字段段值,如加加(+),减减(-),乘乘(*)和和除(/)。你也可以以一次对多多个字段进进行运算,例例如:SELECCT prrice*ytd_salees ttotall revvenuee FRROM ttitlees在这个例子子中,通过过把价格与与销售量相相乘,计算算出了每种种书的总销销售额。这这个SELLECT语语句的结果果将是这样样的:totall revvenuee.81
35、,8559,05546,3118,20055,9778,78881,8559,05540,6119,688(18 rrow(ss) afffectted)最后,你还还可以使用用连接运算算符(它看看起来像个个加号)来来连接两个个字符型字字段:SELECCT auu_fnaame+ +aau_lnname autthor namee FRROM aauthoors在这个例子子中,你把把字段auu_fnaame和字字段au_lnamme粘贴在在一起,中中间用一个个逗号 隔隔开,并把把查询结果果的标题指指定为auuthorr namme。这个个语句的执执行结果将将是这样的的:authoor naame
36、sJohnsson WWhiteeMarjoorie GreeenCheryyl CaarsonnMichaael OOLeaaryDean Straaightt(23 rrow(ss) afffectted)可以看到,SSQL为你你提供了对对查询结果果的许多控控制。你应应该在ASSP编程过过程中充分分利用这些些优点。使使用SQLL来操作查查询结果几几乎总是比比使用有同同样作用的的脚本效率率更高。排序查询结结果本章的介绍绍中曾强调调过,SQQL表没有有内在的顺顺序。例如如,从一个个表中取第第二个记录录是没有意意义的。从从SQL的的角度看来来,没有一一个记录在在任何其他他记录之前前。然而,你可可
38、hors ORDEER BYY au_lnamme当这个SEELECTT语句执行行时,作者者名字的显显示将按字字母顺序排排列。ORRDER BY子句句将作者名名字按升序序排列。你也可以同同时对多个个列使用OORDERR BY子子句。例如如,如果你你想同时按按升序显示示字段auu_lnaame和字字段au_fnamme,你需需要对两个个字段都进进行排序:SELECCT auu_lnaame,aau_fnname FROMM autthorss ORDDER BBY auu_lnaame ,au_ffnamee这个查询首首先把结果果按au_lnamme字段进进行排序,然然后按字段段au_ffnam
41、t之前前。作者名名字按降序序显示。你也可以按按数值型字字段对一个个查询结果果进行排序序。例如,如如果你想按按降序取出出所有书的的价格,你你可以使用用如下的SSQL查询询:SELECCT prrice FROMM tittles ORDEER BYY priice DDESC这个SELLECT语语句从表中中取出所有有书的价格格,显示结结果时,价价格低的书书先显示,价价格高的书书后显示。警告:不是特别需需要时,不不要对查询询结果进行行排序,因因为服务器器完成这项项工作要费费些力气。这意味着着带有ORRDER BY 子子句的SEELECTT语句执行行起来比一一般的SEELECTT语句花的的时间长。取
42、出互不相相同的记录录一个表有可可能在同一一列中有重重复的值。例如,数数据库puubs的表表authhors中中有两个作作者的名字字是Rinnger。如果你从从这个表中中取出所有有的名字,名名字Rinnger将将会显示两两次。在特定情况况下,你可可能只有兴兴趣从一个个表中取出出互不相同同的值。如如果一个字字段有重复复的值,你你也许希望望每个值只只被选取一一次,你可可以使用关关键字DIISTINNCT来做做到这一点点:SELCEET DIISTINNCT aau_lnname FROMM autthorss WHEERE aau_lnname=Rinnger当这个SEELECTT语句执行行时,只返
43、返回一个记记录。通过过在SELLECT语语句中包含含关键字DDISTIINCT,你你可以删除除所有重复复的值。例例如,假设设有一个关关于新闻组组信息发布布的表,你你想取出所所有曾在这这个新闻组组中发布信信息的人的的名字,那那么你可以以使用关键键字DISSTINCCT。每个个用户的名名字只取一一次尽尽管有的用用户发布了了不止一篇篇信息。警告:如同ORDDER BBY子句一一样,强制制服务器返返回互不相相同的值也也会增加运运行开销。福气不得得不花费一一些时间来来完成这项项工作。因因此,不是是必须的时时候不要使使用关键字字DISTTINCTT。创建新表前面说过,数数据库中的的所有数据据存储在表表中。
44、数据据表包括行行和列。列列决定了表表中数据的的类型。行行包含了实实际的数据据。例如,数据据库pubbs中的表表authhors有有九个字段段。其中的的一个字段段名为为aau_lnname,这这个字段被被用来存储储作者的名名字信息。每次向这这个表中添添加新作者者时,作者者名字就被被添加到这这个字段,产产生一条新新记录。通过定义字字段,你可可以创建一一个新表。每个字段段有一个名名字和一个个特定的数数据类型(数数据类型在在后面的“字段类型型”一节中中讲述),例例如字段aau_lnname存存储的是字字符型数据据。一个字字段也可以以存储其它它类型的数数据。使用SQLL Sevver,创创建一个新新表的
45、方法法是很多的的。你可以以可执行一一个SQLL语句或使使用SQLL事务管理理器(SQQL Ennterpprisee Mannagerr)来创建建一个新表表。在下一一节里,你你将学会如如何用SQQL语句来来创建一个个新表。SQL数据据操作基础础(初级) 4 netnoova 于于 99-6-277 13:59:445 加贴贴在 数据据库探讨:用SQL创创建新表注意:如果你还没没有建立自自己的数据据库,现在在就跳回到到第三章创创建这个库库。你绝不不能向maasterr,temmpdb或或任何其他他任何系统统数据库中中添加数据据。从SQL Seveer程序组组(在任务务栏中)中中启动ISSQL/w
46、w程序。出出现查询窗窗口后,从从窗口顶部部的下拉列列表中选择择你在第三三章所创建建的数据库库。下一步步,在查询询窗口中键键入下面的的SQL语语句,单击击执行查询询按钮,执执行这个语语句:CREATTE TAABLE guesstboook (vvisittor VVARCHHAR(440),ccommeents TEXTT,enttrydaate DATETTIME)如果一切正正常,你会会在结果窗窗口中看到到如下的文文字(如果果出现异常常,请参阅阅第三章):This commmand dit not retuurn ddata ,andd it did not retuurn aany rro
47、ws 祝贺你,你你已经建立立了你的第第一个表!你所创建的的表名为gguesttbookk,你可以以使用这个个表来存储储来字你站站点访问者者的信息。你是用RREEATTE TAABLE语语句创建的的这个表,这这个语句有有两部分:第一部份份指定表的的名子;第第二部份是是括在括号号中的各字字段的名称称和属性,相相互之间用用逗号隔开开。表guesstboook有三个个字段:vvisittor,ccommeents 和enttrydaate。vvisittor字段段存储访问问者的名字字,commmentts字段存存储访问者者对你站点点的意见,eentryydatee字段存储储访问者访访问你站点点的日期和
48、和时间。注意每个字字段名后面面都跟有一一个专门的的表达式。例如,字字段名coommennts后面面跟有表达达式TEXXT。这个个表达式指指定了字段段的数据类类型。数据据类型决定定了一个字字段可以存存储什么样样的数据。因为字段段commmentss包含文本本信息,其其数据类型型定义为文文本型。字段有许多多不同的数数据类型。下一小节节讲述SQQL所支持持的一些重重要的数据据类型。字段类型不同的字段段类型用来来存放不同同类型的数数据。创建建和使用表表时,更你你应该理解解五种常用用的字段类类型:字符符型,文本本型,数值值型,逻辑辑性和日期期型。字符型数据据字符型数据据非常有用用。当你需需要存储短短的字
49、符串串信息时,你你总是要用用到字符型型数据。例例如,你可可以把从HHTML formm的文本框框中搜集到到的信息放放在字符型型字段中。要建立一个个字段用来来存放可变变长度的字字符串信息息,你可以以使用表达达式 VAARCHAAR。考虑虑你前面创创建的表gguesttbookk:CREATTE TAABLE guesstboook (vvisittor VVARCHHAR(440),ccommeents TEXTT,enttrydaate DATETTIME)在这个例子子中,字段段visiitor的的数据类型型为VARRCHARR。注意跟跟在数据类类型后面的的括号中的的数字。这这个数字指指定了这
50、个个字段所允允许存放的的字符串的的最大长度度。在这个个例子中,字字段vissitorr能存放的的字符串最最长为四十十个字符。如果名字字太长,字字符串会被被截断,只只保留四十十个字符。VARCHHAR类型型可以存储储的字符串串最长为2255个字字符。要存存储更长的的字符串数数据,可以以使用文本本型数据(下下一节中讲讲述)。另一种字符符型数据用用来存储固固定长度的的字符数据据。下面是是一个使用用这种数据据类型的例例子:CREATTE TAABLE guesstboook (vvisittor CCHAR(40),commmentss TEXXT,enntryddate DATETTIME)在这个例
51、子子中,字段段visiitor被被用来存储储四十个字字符的固定定长度字符符串。表达达式CHAAR指定了了这个字段段应该是固固定长度的的字符串。VARCHHAR型和和CHARR型数据的的这个差别别是细微的的,但是非非常重要。假如你向向一个长度度为四十个个字符的VVARCHHAR型字字段中输入入数据Biill GGatess。当你以以后从这个个字段中取取出此数据据时,你取取出的数据据其长度为为十个字符符字符符串Billl Gaates的的长度。现在假如你你把字符串串输入一个个长度为四四十个字符符的CHAAR型字段段中,那么么当你取出出数据时,所所取出的数数据长度将将是四十个个字符。字字符串的后后面
52、会被附附加多余的的空格。当你建立自自己的站点点时,你会会发现使用用VARCCHAR型型字段要比比CHARR型字段方方便的多。使用VAARCHAAR型字段段时,你不不需要为剪剪掉你数据据中多余的的空格而操操心。VARCHHAR型字字段的另一一个突出的的好处是它它可以比CCHAR型型字段占用用更少的内内存和硬盘盘空间。当当你的数据据库很大时时,这种内内存和磁盘盘空间的节节省会变得得非常重要要。文本型数据据字符型数据据限制了字字符串的长长度不能超超过555个字符。而使用文文本型数据据,你可以以存放超过过二十亿个个字符的字字符串。当当你需要存存储大串的的字符时,应应该使用文文本型数据据。这里有一个个使
53、用文本本型数据的的例子:CREATTE TAABLE guesstboook (vvisittor VVARCHHAR(440),ccommeents TEXTT,enttrydaate DATETTIME)在这个例子子中,字段段commmentss被用来存存放访问者者对你站点点的意见。注意文本本型数据没没有长度,而而上一节中中所讲的字字符型数据据是有长度度的。一个个文本型字字段中的数数据通常要要么为空,要要么很大。当你从HTTML fform的的多行文本本编辑框(TTEXTAAREA)中中收集数据据时,你应应该把收集集的信息存存储于文本本型字段中中。但是,无无论何时,只只要你能避避免使用文文
54、本型字段段,你就应应该不适用用它。文本本型字段既既大且慢,滥滥用文本型型字段会使使服务器速速度变慢。文本型字字段还会吃吃掉大量的的磁盘空间间。警告:一旦你向文文本型字段段中输入了了任何数据据(甚至是是空值),就就会有2KK的空间被被自动分配配给该数据据。除非删删除该记录录,否则你你无法收回回这部分存存储空间。数值型数据据SQL SSeverr支持许多多种不同的的数值型数数据。你可可以存储整整数、小数数、和钱数数。通常,当你你需要在表表中的存放放数字时,你你要使用整整型(INNT)数据据。INTT型数据的的表数范围围是从-22,1477,4833,6477到2,1147,4483,6647的整整
55、数。下面面是一个如如何使用IINT型数数据的例子子:CREATTE TAABLE visiitlogg (viisitoor VAARCHAAR(400),nuumvissits INT)这个表可以以用来记录录你站点被被访问的次次数。只要要没有人访访问你的站站点超过22,1477,4833,6477次,nuubvissits字字段就可以以存储访问问次数。为了节省内内存空间,你你可以使用用SMALLLINTT型数据。SMALLLINTT 型数据据可以存储储从-322768到到327668的整数数。这种数数据类型的的使用方法法与INTT型完全相相同。最后,如果果你实在需需要节省空空间,你可可以使用
56、TTINYIINT型数数据。同样样,这种类类型的使用用方法也与与INT型型相同,不不同的是这这种类型的的字段只能能存储从到2555的整数。TINYYINT型型字段不能能用来存储储负数。通常,为了了节省空间间,应该尽尽可能的使使用最小的的整型数据据。一个TTINYIINT型数数据只占用用一个字节节;一个IINT型数数据占用四四个字节。这看起来来似乎差别别不大,但但是在比较较大的表中中,字节数数的增长是是很快的。另一方面面,一旦你你已经创建建了一个字字段,要修修改它是很很困难的。因此,为为安全起见见,你应该该预测以下下,一个字字段所需要要存储的数数值最大有有可能是多多大,然后后选择适当当的数据类类
57、型。为了能对字字段所存放放的数据有有更多的控控制,你可可以使用NNUMERRIC型数数据来同时时表示一个个数的整数数部分和小小数部分。NUMEERIC型型数据使你你能表示非非常大的数数比IINT型数数据要大得得多。一个个NUMEERIC型型字段可以以存储从-10388到10338范围内内的数。NNUMERRIC型数数据还使你你能表示有有小数部分分的数。例例如,你可可以在NUUMERIIC型字段段中存储小小数3.114。当定义一个个NUMEERIC型型字段时,你你需要同时时指定整数数部分的大大小和小数数部分的大大小。这里里有一个使使用这种数数据类型的的例子:CREATTE TAABLE nume
58、eric_dataa (biignummber NUMEERIC(28,00), fracttion NUMEERIC (5,44) )当这个语句句执行时,将将创建一个个名为nuumeriic_daata的包包含两个字字段的表。字段biignummber可可以存储直直到28位位的整数。字段frractiion可以以存储有五五位整数部部分和四位位小数部分分的小数。一个NUMMERICC型数据的的整数部分分最大只能能有28位位,小数部部分的位数数必须小于于或等于整整数部分的的位数,小小数部分可可以是零。你可以使用用INT型型或NUMMERICC型数据来来存储钱数数。但是,专专门有另外外两种数据据类
59、型用于于此目的。如果你希希望你的网网点能挣很很多钱,你你可以使用用MONEEY型数据据。如果你你的野心不不大,你可可以使用SSMALLLMONEEY型数据据。MONNEY型数数据可以存存储从-9922,3337,2203,6685,4477.55808到到922,3337,2203,6685,4477.55807的的钱数。如如果你需要要存储比这这还大的金金额,你可可以使用NNUMERRIC型数数据。SMALLLMONEEY型数据据只能存储储从-2114,7448.36648到2214,7748.33647 的钱数。同样,如如果可以的的话,你应应该用SMMALLMMONEYY型来代替替MONEE
60、Y型数据据,以节省省空间。下下面的例子子显示了如如何使用这这两种表示示钱的数据据类型:CREATTE TAABLE prodductss (prroducct VAARCHAAR(400),prrice MONEEY,Discoount_pricce SMMALLMMONEYY) 这个表可以以用来存储储商品的折折扣和普通通售价。字字段priice 的的数据类型型是MONNEY,字字段disscounnt_prrice的的数据类型型是SMAALLMOONEY。存储逻辑值值如果你使用用复选框(CCHECKKBOX)从从网页中搜搜集信息,你你可以把此此信息存储储在BITT型字段中中。BITT型字段只
0/150
联系客服
本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!