我在存储过程中有如下语句:
UPDATE TABLE TABLE1 SET FIELD1=XXXX
...
SELECT FIELD1 FROM TABLE1当UPDATE执行后,其余的应用程序或者线程就不能再更改这条记录了.直到我的存储过程执行完成
要做到这种需求,应该使用哪种事务类型?是否对性能有影响?

解决方案 »

  1.   

    select * from table1 where pk_col='xxx' for update;
    update table1 set field1=... where pk_col='xxx';
    ...
    ...
    commit;
      

  2.   

    楼上的搞错select和update的顺序了
    是不是update本身就会锁定这条记录,直到commit完成,别的线程和应用程序才能更改它
      

  3.   

    --这一句select ...for update是对要更新的行加锁,其它session无法访问
    select  *  from  table1  where  pk_col='xxx'  for  update;  update  table1  set  field1=...  where  pk_col='xxx';  
    ...  
    ...  
    SELECT  FIELD1  FROM  TABLE1;
    commit;