Topic: 请教, 一个较难的问题, 请大家帮帮忙 谢谢

  Print this page

1.请教, 一个较难的问题, 请大家帮帮忙 谢谢 Copy to clipboard
Posted by: thor0127
Posted on: 2003-09-03 13:39

问题是这样的:
对于一个表的记录R1, 这时用户A先读出记录R1, 并对读出的记录R1进行了修改,
在用户A读出记录R1,修改记录R1,提交记录R1的这个过程里.
有一用户B也读出了记录R1,修改记录R1, 并提交此次操作.
用户B的提交操作在用户A的提交操作的前面完成.
这样的过程对数据库来说, 用户A和用户B的操作是允许的.
但对我要实现的业务逻辑来说, 用户A的提交操作是不允许的.
在C/S的应用程序中很容易实现, 在B/S的应用程序中我不知道怎么实现?
请帮帮忙.
谢谢!

2.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: whoami13
Posted on: 2003-09-03 14:38

一个建议,不知可行否:
对于共享数据资源作同步标记,例如,对R1来说,被A修改的时候,标记为1,此时,b不能访问,A修改完后,置标记为0,B可以修改

3.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: wood
Posted on: 2003-09-03 15:58

数据库都有隔离机制来解决这种问题。

不知道楼主在c/s中是怎样容易实现的?在b/s中的难点在哪儿?

4.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: eastwin
Posted on: 2003-09-04 04:34

Add one field in this table, which is automatically updated by adding 1 (using trigger or code itself) if this record is updated. Therefore you should read this number along with the record, and update the record by comparing this number to see whether it has been changed by someone else or not.

5.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: floater
Posted on: 2003-09-04 08:58

ask your dba whether your db has the exclusive lock or not.

6.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: hitaco
Posted on: 2003-09-04 13:35

1. Use database specific feature.
In oracle, you can use "select for update" syntax

When user B wants to select the same data, the thread will block, waiting for A's commit or rollback.

2. set Transaction Isolation Level to Serialization

java.sql.Connection.setTransactionIsolation()

3. add version number column name in table, as eastwin's reply

4. synchornize the data access logic manully

7.Re:请教, 一个较难的问题, 请大家帮帮忙 谢谢 [Re: thor0127] Copy to clipboard
Posted by: samuel
Posted on: 2003-09-05 09:15

有两种办法:
1、用户A先锁住相干的记录, 修改完了再释放;
2、用户A在读出记录的时候先记下标志(锁记录), 如Timestamp, 释放锁, 当需要UPDATE时再检查标志是否被更改, 如果是, throw exception.
用户B如是。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923