timestp 防止更新丢失

假如有一个购票系统:

 三个用户A,B,C希望同时订购一张票,可能会读取到同一条未被销售的车票记录,然后再进行更新(购买),为了确保数据的一致性,防止更新丢失,

通常的解决方法是使用updlock 加入更新锁,不过这样会造成资源争用和等待,在并发量很高的情况下,会对性能造成较大的影响。

乐观锁定的解决方案:

  给表加入一个 timestamp 类型的字段,每次更新行数据时,该行中的该列都会自动更新

  在获取并更新记录的时候,通过比较该列值,就可判断是否已经被更新过。

例:

  select top 1 @Id=Id,

    @timestp=timestp

    from coupon

    where isused=0

     -- 更新时比较timestamp字段是否已经改变,发生改变则更新失败

    update ……  where Id=@Id and timestp=@timestp

  这种方法也存在一些问题:更新任何字段时都会更新timestamp字段,可能会造成一些错误的更新判断。

posted @ 2013-01-06 17:13  spandiv  阅读(152)  评论(0编辑  收藏  举报