Posted on 2008-06-26 11:24
leekiang 阅读(397)
评论(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
对数据库中的数据修改都是在内存中完成的,这些修改的结果可能已经写到硬盘也可能没有写到硬盘,如果在操作过程中,发生断电或系统错误等故障,数据库可以
保证未结束的事务对数据库的数据修改结果即使已经写入磁盘,在下次数据库启动后也会被全部撤销;而对于结束的事务,即使其修改的结果还未写入磁盘,在数据
库下次启动后会通过事务日志中的记录进行“重做”,即把丢失的数据修改结果重新生成,并写入磁盘,从而保证结束事务对数据修改的永久化。这样也保证了事务
中的操作要么全部完成,要么全部撤销。