MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

一个事务的问题

Posted on 2008-06-26 11:24 leekiang 阅读(350) 评论(0)  编辑  收藏 所属分类: jdbc、事务、并发
我单位物资系统:库存表kcb,库存明细kcmx 

当发生一笔动态的时候,先查询库存表中的库存数量,然后加上增减数量,得到新库存,update,commit; 

接着把库存数量,增减数量,更改时间分别插入到库存明细:前次数量,增减数量,更改时间。 

问 题:现在有两条数据更改时间很接近  a  10:51:47:01b  10:51:46:25  .也就是说两条数据先后更新,而且更新的是同样一笔物资。于是,a  条记录得到的前存数量和b条记录得到的前存数量一样,(好像叫读脏数?)于是记录b的更新就被当作不存在了! 

系统在随后的更新中查到的是记录a更新候的数据,一切正常,唯有记录b  被忽略了;(于是库存错了,领导批了) 

 

还有一个奇怪的问题,就是库存明细的查询是用存储过程作的,为什么select到pb的数据窗口之后别的数据都是按时间顺序排列,唯有上面两条,a在b之前!时间也会错?相差太近? 

我以后怎么办?高人教我

http://blog.csdn.net/qiume/archive/2009/02/26/3938382.aspx
对数据库中的数据修改都是在内存中完成的,这些修改的结果可能已经写到硬盘也可能没有写到硬盘,如果在操作过程中,发生断电或系统错误等故障,数据库可以 保证未结束的事务对数据库的数据修改结果即使已经写入磁盘,在下次数据库启动后也会被全部撤销;而对于结束的事务,即使其修改的结果还未写入磁盘,在数据 库下次启动后会通过事务日志中的记录进行“重做”,即把丢失的数据修改结果重新生成,并写入磁盘,从而保证结束事务对数据修改的永久化。这样也保证了事务 中的操作要么全部完成,要么全部撤销。

只有注册用户登录后才能发表评论。


网站导航: