关于事务中一个更新的问题 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
在事务开始时,我想要查询出一个表里的数据备用,但查询时是S锁,我现在是这样做的,就是在查询前先更新一下,其实这个更新是无意义的,只是为了加U锁而已,不知道这样做是对不对的
datamoduleform.ADOConnection1.BeginTrans; try ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('update 表一 set 单位=:dw1 where ID=:id and 单位=:dw2'); ADOQuery1.Parameters.ParamByName('dw1').Value:=dw(变量); ADOQuery1.Parameters.ParamByName('dw2').Value:=dw;(同上) ADOQuery1.Parameters.ParamByName('id').Value:=ypid; ADOQuery1.ExecSQL; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select * from 表一 ...........) .......................
------
我的编程起步于ktop,我将永远支持ktop |
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
我是说的就是不同的transaction,但如果事务开始用S锁的话,另一个事务也发出同样的请求时,查询到的数据就不正确了
比如 A用户:查询表一某字段,再将该字段数据加上1,B用户查询表一某字段,再将该字段数据加上1,如果正好同时发生,那么该字段的数据没有加到2? 我现在的方法是 A用户: 修改表一另一个字段(其实就是修改为原来的内容,等于没修改,但就是事务一开始就加了U锁,)查询表一某字段,再将该字段数据加上1,这样B用户就要等这事务完了才好执行相同的流程(也就是等A事务完了才好开始新的事务加U锁,这样数据就会加到2了?) ===================引 用 文 章=================== 其實Lock是針對不同transaction,才有意義吧 同transaction內的資料本來就是互相且可視的....
------
我的编程起步于ktop,我将永远支持ktop |
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
在网上看到一篇相关的文章后,我想我上面的代码这样改了:(不知道我的提问的意思是否表达清楚了,我这样做是否正确?)谢谢
datamoduleform.ADOConnection1.BeginTrans; try ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('update 表一 set 单位=''123'' where 1=2 );//永远不可能执行到,但在事务中取得了U锁,其它事务要等这个事务结束后才好执行.保证了下面的代码取出数据后再修改就能正确了. ADOQuery1.ExecSQL; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select * from 表一 ...........)
------
我的编程起步于ktop,我将永远支持ktop |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |