《DB2数据库对象基础知识.docx》由会员分享,可在线阅读,更多相关《DB2数据库对象基础知识.docx(15页珍藏版)》请在优知文库上搜索。
1、DB2数据库对象根本数据庠对象数据库对四是一个数据库的构造块(bui1.dingb1.ock).DB2提供了不同类型的数据库刻象来存储和表示不同信息,通过使用数据定义语言(DP1.),可以创立、修改和删除数据库对象,要操纵数据库对象,可以使用数据操纵语言(DM1.),例如SE1.ECT,UPDATE,INSERT和SE1.ECT语句.常用的数据库对象有:表用户定义数据类里约束视图索引除了Fami1.yFUndaKnIaIS教程里介绍的一些数据库对象外.还有一线其他的时象,很多开发人员在开发DB2陶川程序时会发现这些对象比较有用.本节我们将介绍这些对象.在继续之前,有一点要注;fi:在下面看到的
2、一些例子中,对象名称是以小写形式指定的。无论DB2在巩个平台上运行,它总是以大写形式存储名称,除非标识符的名称以双引号*,*)括起来了。例如,下面的语句创立一个名为emp1.oyee小写的表.该表的列定义与表EMP1.OYEE(大写)是一样的,CREATETAB1.E*emp1.oyee*1.IKEemp1.oyee则名别名(a1.ias)是指一个已有的表、视图的另一个名称,也叫呢称(nickname),别名也可以作为另一个别名的昵称.与这些对象一样,别名也可以被创立或捌除可以有与之相关的注糅.下面是CREATEA1.1.S语句的一些例子:CREATEA1.IASa1.iastabiFORta
3、bi:CREATEA1.IASbob.a1.iastabiFORto.tabi;CREATESYM(WYMbob.a1.ias1.ab2FORbob.a1.iastabi;可以看到,CREATEA1.IAS语句比较简单。可以在源对象所在的同一模式中创立别名(如笫1行),或者也可以全限定别名(如第2行)。为了与DB2forZSerieS兼容,使用关键字SYNSiYM代普A1.IAS也是合法的(如第3行使用别名时无JE专门的授权或权限,不过,需要获得与别名所引用的底层时象相关的授权。美于数据库对象权限的完整清单,请参考DB2DBA认证教程ServerInUniIKCInCn1.(请参阅参考资料.前
4、面已提到,我们也可以为昵称创立别名.昵称是引用位于联邦系统上的数据表或视图的数据库对望.联邦数据库支持超出了本教程的范围.在本教程系列的笫2局部,Datananipu1.ation.我的将学习更多有关联邦系统的知识.要为别名添加注释,可以发出以下语句:COMMEVrONa1.iastabiISMyfirsta1.iasontab要捌除一个别名,使用DRoP语旬,这与所有其他数犯库对象是样的:DROPA1.IASa1.iastabi序列对象序列(sequence)是一种数据库对象,这种对立允许自动生成值.序列对飘与标识列(identityco1.umn)不同.标识列是要与一个特定的表绑在一起的,
5、而序列是一种全局的、独立的对象,同一个数犯库中的任何表拙可以使用它。标识列是序列对弦的一种特例.因此.标识列的特征也适用于序列对象.下面就例择了-条CREATESEQ1.iENCE谙句:CREATESEQUENCEyseqSINTEGERSTARTWIIII360INCREMENTBY10NOMAXVA1.UECYC1CACHE20任何包括0在内的数字数据类型都可用于序列值.这些类型包括SM1U.1.INT.INTEGER,BIGINT或DECIMA1.基于这些数据类型的任何用户定义独特类型(distincttype)也都可以用于序列值,这进一步扩展了用户定义独特类里在应用程序中的使用,如上面
6、的例子所示,您可以为序列对阪指定起始值,从而自定义序列对象.在这个例子中,序列的第一个值是360.后续值的生成是由MCREYENTBY子句控制的,这里还支持正、负常fit以产生升序和降序(ft缺省情况下,一个序列所生成的最小值和球大值是由该序列数据类鞭的取值范恸来界定的,例如,INTEGER类型的序列值必须处在-2,147,483.647到2.147.483.647之间的范围内.在DB2SQ1.ReferenceGuide中可以找到所有数字数据类型的取值范围.为了改变这种缺省行为,可以使用MIXVA1.1.1E和MAXVAUJE选项来为生成的伯设过一个边界。如果到达了母小值或爆大值,加么可以使
7、用另一个选JS,即CYC1.E或NOCVC1.E来设定序列伯是否应该循环。注意,如果CXC1.E生效,则序列就可以生成重处的值。CACHE选项允许DB2拘一些预先分配好空间的值保存在内存中,以提高性能.CACHE20是缺省的行为.关于这个选项有一点要i堇记:如果在所有缓存的值鼓使用之前关闭DB2.僚么任何缓存的值和未使用的值都符被丢弃.当DB2重新启动时,又会生成和缓存下一块的伯.从而造成值之间的不连续,即值之间存在间隔.如果应用程序不允许伯之间有间隔,可以考虑使用NOCACHE选项,如果没有使用缓存.则性能就会下降,因为要频繁地生成序列数字.短当生成个新值的时候,都会写下一条H志记录.因此,
8、更高效的做法是根据请求来狭取值.并将这些值援存在内存中.通过A1.TERSEMiENCE语句,可以更改序列对象的特征,除了序列值的数据类型以外,上面所讨论的所有的设置都可以蟋改.要获得完整的谙法,请参考DB2SQ1.ReferenceGuide(请参阅参考资料).删除一个序列对象与删除任何其他的数据库对象是一样的,不同之处是这里还要使用到一个RESTKICT关键字。这样Ur以防止在有依赖的情况下捌除序列。DROPSEQVENCEmyseqRESTRICT生成和茨取序列值序列是一种数据库对象,因此时序列的访问也是由权限来控制的,决省情况下,只有序列的创立者,即SYSAMI和DBADM拥有该对象的
9、USAGE权限.如果希望其他用户也能膨使FM序列,则得要使用卜面的语句:GRANTUSAGEONSEQUENCEseq_objecta三eTOPUB1.IC有两种非达式可用于生成和换取序列(ft,NEXTVAI.I-ORSeq-name用于获取下一个序列值,而PREYVA1.FORSgFame则用于获取上一个生成的序列值,下面的例子例徉了这些表达式的使用,INSERTINTOt1.V1.1ES(NEXTVA1.FORayseq,BOB,);INSERTINTOUVA1.UES(NEXTVA1.FORayseq.,PAT,);COMMIT;INSERTINTOt1.VA1.fES(NEXTVA1
10、.FORByseq1GENE):RO1.1.BACK;INSERTINTOt1.VA1.UESNEXTVA1.FORayseq,PAU1.);VA1.UESPREWA1.FORmyseqINTO:h。S1.Yar假设我们以一个空表t1.开始,myseq的下一个序列值是k如果禁用了autocorait,则在执行上述语句之后,U将包含下面几行:1NAME1BOB2PATIPAU1.3record(三)se1.ected.虽然为CENE生成的(ft被回滚了,但是DB2并没有再次使用它.因而,下一个为PAU1.生成的序列值就是4,而不是3。这个例f中的最后一条语句展示了如何使用PREwA1.表达式.宿
11、主变fit:hostvar存储当前会话中生成的最后一个伯.如果想保存前面生成的值,那么应该在生成下一个但之前保存PHEVVAI.ft.,时表顾名思义,他时表(temporarytab1.e)不是永久性的数据库对象.临时表与普通的表在行为上是一样的,不同之处是,并非所有的功能和选项都是受支持的和/或是必需的。临时表只能城持在,次连接期间,当连接关闭时,在此连接内声明的所有临时表都将自动删除掉。只有声明临时长的会话或应用程序才能访问临时我.如果两个应用程序用相同的名字创立了一个临时代.该临时表的每个实例仍然是惟一的。因而,完全不必担忧出现峪时数据冲突的情况.由于临时表只允许单连接(SinR1.C-
12、connection)访问,因此这里无需使用锁。这正是格时表的一个主要的性能优势。声则时衰要声明一个格时表,必须存在个USER临时表空间(不同于SYSTEM格时衣空间),用以存储临时表的定义和内容.SYSTEM临时表空间只是DB2在内部用来执行诸如排序之类操作的.下面这条简单的谙句符创立一个用户临时表空间.CREATEUSERTEMPORARYTAB1.ESPACEUSerteBPSPaCeMANAGEDBYSYSTBIUSINGCuser1.cepspace)声明全局临时表时,可以使用很多可选子句.下面的例子对这些子句的特性作了说明。DEC1.AREG1.OBA1.TEMPORARYTAB1
13、.Etdept(deptidCI1.AR(6).deptnameCI1.AR(20)OXCOMMITDE1.ETEROWSNOT1.OGGEDINUsertcepspace在这个例子中,声明了临时衣JdePt,这个表干j两列,Oncommitde1.eterois子句册定在每次执行C(MM1.T操作时删除临时表的内容,在DB2V8中,可以选择记录对临时表的更改,以便回滚。这个例子规定对该表的更改足NOT1.OGGED,这意味着对该表的任何操作.包括创立以及更改,都不做日志记录.如果在一个工作单位内创立衣,然后I可滚,则临时我将被删除.另方面,如果在此工作单位内删除该表.则该表在愦狂时将没有任何
14、行.无需使用IN子句来指定该临时表都要使用的用户临时衣空间.如果没有指定该信息.DB2就会搜索最适用的表空间。如果找不到用户临时去空间,DB2将产生个错误。让我们乔看另一个例子,DECI.AREGWBA1.TEMPORARYTAB1.EIJroj1.IKEprojectONCOMMITPKES1.tKVERO,SWITHREP1.ACEINusertempspace临时表5Oj是用1.IKE关键字声明的,因此它拥有与名为PrOjeCt的持久表或视图相同的列定义。ONCOMMITPRESERVEROWS子句说明,在执行COMMIT语句时,该临时表中的所有行都将被保存。因此,这些行就可以在下一次事
15、务中用于进一步的处理.在同次会话中使用相同的名称声明丹一个彼时衣之前,首先必须删除该临时表。可以显式地删除该表,也可以像这里一样使用WITHREP1.ACE选项。如果使用了WITHREP1.ACE选项,DB2将隔式地IH除所有数据.IM除该幅时表.并用新的定义重新创立该临时表.如果使用了连接池(connectionpoo1.ing).UTHREP1.ACE选项用起来就十分方便了。连接池是用于由川数据库连接的一种机制,这样就不必完全按照要求分配和回收资源。这些操作的开销都是相当大的,尤其是在有大吊执行很短事务的连接时,更是如此.由于没有释放连接,先前使用的临时表就可能得不到去除,下一个使用该连接的应用程序就可能使用上一次执行时遗留下来的数据.因此,f史用BITHKIT1.ACe选项可以保证用新的定义利新所声明的监时衣.模式与数据库对象大多数数据底对象都是用一个模式(schema)和一个对象名(Objectname)标识的。数据库模式为数据库时象提供龙耨上的分类,下面例择了这种分为两局部的对象名:DBzA1.MIN.EMP1.OYEEHRPROD.AUDn1.v1.EW1IRPROD.audittrig如果在访问数据库对象时没有指定模式,则用于建立数据库连接的用户ID将被设为缺省的模式。例如,如果用户db2admin连接到一个数据库.并创立表T1.则DB2招创立一个名为db2adm