有关多线程的问题!!!

Delphi_Li 2003-01-23 02:09:33
我有一个程序适用多线程处理数据库,但是遇到这样的问题,当一个线程没有更新完数据,而另一个线程又对同一条记录操作,经常出现数据错误的情况,如何能避免这样的情况发生???

例如:
Table_A

ID VALUE
-----------
01 100

第一个线程将VALUE值减去100,但还没有Commit,这时候第二个线程又对VALUE值减去100。正常应该是-100,但是由于第一个线程没有Commit,所以得到的数值为0,如何解决这个问题呢???
...全文
23 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy2000 2003-01-23
  • 打赏
  • 举报
回复
没错,如果你直接用Update Table_A set value=value-100 where id=0 就不会有问题了
Lastdrop 2003-01-23
  • 打赏
  • 举报
回复
估计对表的操作是先SELECT出来,然后经过程序处理再update的吧?这样才会出现数据有误的情况。
penitent 2003-01-23
  • 打赏
  • 举报
回复
楼主的理解是错了,第二个进程在第一个没有提交的时候看到的不是0,还是100,如果第一个进程没有提交,那么第二个进程想减的时候,会等第一个进程提交后才能操作,那么就是还是0-100=-100没有问题.
suxiao 2003-01-23
  • 打赏
  • 举报
回复
有道理,这就是oracle的好处呀!
jiezhi 2003-01-23
  • 打赏
  • 举报
回复
其实你不用去考虑这样的问题。
oracle自己有加锁解锁机制。
在你使用诸如delphi这样的工具开发的时候,写一些异常处理就行了。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧