资源描述:
《用DELPHI开发基于SQLserver2000的多客户应用程序(1).pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、}撇稽薰鑫揣豁撇一麒瓣⋯纂撇翼鹅熬薰愚黑溥撒州霭那卿黔环羹淤摊蓦漾鬓群黔钾姆纂鬃簿释弋笋钾得滚魏书堤,。摘要本文详细分析数据库的并发机制以及使用DELPHI的数据导航条与数据集组件来解决多客户并发的问题,,,,,,关键词数据并发多客户主从表数据导航条数据集组件数据更新SQL:用DEDBNavigator、他事务不能修改R。另外,还有一个加锁的范围需要考虑,我们在网上有很多人问这样一问题LPHI的table、,,,dataset组件来实现多客户的程序时同时向主表插人一条可以进行行加锁也可以进行表加锁甚至可以进行数据库加新记录,编辑好后直接提交,往往会出现线路被占用不能
2、提交数锁,加锁的范围越大,那么实现就越简单,开销就越小,数据的并。首先:,,,据错误回顾一下数据库的并发理论并发控制主要是考发程序就越低!反之如果加锁范围越小那么实现就越复杂。:,。虑到多个用户同时存取数据库中的同一数据的情况例如飞开销就越大数据的并发程序就越高一般地考虑到加锁的成,,,机票的两个售票员A和B现在系统里面有10张机票A和B本和性能处理少量数据的事务应该尽可能减少加锁的作用范此时查看数据库里面,都得到10张,此时A卖出去一张,写回围,提高数据的并发程度,应该采用行锁,防止则应该采用表锁,B,。,,。数据库数量为9张接着也卖出去一张因为他以前读取的是等等
3、另外当一个事务操作完毕的时候应尽可能快地解锁,9,,se:,,10张他因此也写回这样就出现了错误实际上只有8张票QLserv中还有一种更新锁(U锁)这种锁和S锁是兼了!这个问题称之为’‘写覆盖”。,有以下几个并容的,如果一个事务要更新数据可以采取,经过分析和研究U锁那么在事务初“”,,,,,发控制的情况(我们不考虑两个事务都读的情况那样是不需期可能是读取数据此时是S锁到后面数据进行了修改这个:。,要考虑的)时候S锁自动升级为X锁在SQLServer中是自动强制锁定,。TlTlT1的但是我们应该学习以便能够有效地设计应用程序一般的孙adA二10砒adA=10}{趾叭A
4、=50勋姐B=100一A=10】“,:S锁,x。A=A一1八艺A一1B=100B二B市2=luU情况下面我们这样考虑读取采用写人采取锁几d“WteA(91不七血eA人刊旧=卫匆玉V石leB,:ri)(9)⋯如果从程序员的角度来看可以把锁分成两种乐观锁timistieLoepessimistieLoe。(叩k)和悲观锁(k)乐观锁就是在处理数据的时候,完全由数据库系统来自动实行加锁的管理,从前面斑祖A=5口,、、处adB=2D0我们知道sQLserver采取的是乐观锁:对UpdateInsert于A」旧=250eX,t,;验算(不正确〕Delet自动采用锁对于Sele
5、c自动采用S锁悲观锁则需要程序员自己来控制加锁、解锁的动作。“”,:在数据库中有一个特定的名词脏数据用来描述那些被如何利用锁来解决前面的冲突某些事务变更但是还没有提交。的数据T1T2T,T2T,}一那么如何解决用户同时访问数据的问题呢?总不能因为并XL〔ckA几甲此引S肠ckAx切改盛一釉已人=10XI口ek八SLoCkB孙qile叭(‘口’“发而限制用户的操作吧!并发控制的解决方案是锁二一lm兮AA1v沁it现耳死adA巧O下橇i、默kT-LOCNG”。。勺范teA(9)wait吗几毗B二100凡确初认g‘日一“_‘“(KI)和事务事务是并发控制的基本单位事务不等
6、于Co工I义此心kAA斗〔巴lj0XU」止们ekB一丽程序,一个程序可。下面我们来详细讨论封锁⋯以包含多个事务机制。XUld匀ckAF沼毗A=9砒妇A=50,:_从数据库的角度来看锁有两种类型排它锁(ExdusiveA=A1几面B,100e」.思‘V3朽tA(8)AB150⋯loes,XShloes,。Xk简称锁)和共享锁(arek简称S锁)锁只允许Co】拍由t验算(OK〕XUI由ckACo功加i1,、写),加锁的事务进行操作其他事务禁止加锁和任何操作(读SU址习ckAS口1正‘ekB其他事务必须等待解锁才能继续运行!S锁可以允许多个事务,TR加了,同时对数据加锁如
7、果事务对数据s锁那么其它的x,,事务就不能再对R加锁但是可以加S锁这样可以保证其2004{3窿狡始翰雍护魏舞夔缈辫缭彝纂肇{撇黔狐缄溉忍瞩孤入翰嘟黔撬窈黔:之所,从以上理论不难看出以出现上述问题就是每一个用s』0:stnng;//用于存放学号,户都插人记录时由于主表的主关键码字段的在提交前值都为name:strlng;//用于存放姓名,,,thda空相当于是同一条记录根据数据库的并发理论所有的用户bjry:string;//用于存放出生日期X锁,,如何解决上述{Privatedeelarations}都会对该记录加这样就造成了上述问题C问题呢DBNavitor提