平时有考虑数据冲突吗?如一个BBS可能两个人同时在改贴子~好像都没什么处理的嘛~( BBS中两个人同时修改一个贴子的可能性比较小)

解决方案 »

  1.   

    冲突的可能是有的,但是数据库默认就有一些锁机制>>> 如一个BBS可能两个人同时在改贴子
    对于程序来讲,同时打开一个帖子修改是可能的,但是存入数据库时肯定是有先后的,以最后一个为准
      

  2.   

    如果A用户修改标题,B用户修改文章内容,任意一个人打开时另外一个还没有Update数据,就是说两个人得到的数据是一样的,但是入库肯定是先后的,假设A先Update,接着B进行Update,这样A修改的标题就没有生效
    我觉得这样是不合理的.
      

  3.   

    这种方式是需要程序代码来实现的,一般可以是在写Update语句中的Where条件时,将本次所修改的字字段的原值作为条件之一。
    如表Table1有字段是F1, F2, F3。其中字段F1是主键,需要将字段F2的值由A改为B,则应写为
    UPDATE Table1  SET F2 = 'B' WHERE  F1=xxx AND F2='A'。 语句执行完成后,再判断有没有更新到数据,若一行都没有,则表示数据已被其他人修改,则提醒用户。
      

  4.   

    @efly75
    你的方法应该是可行的~@Sorder互斥变量在每次update时都建立吗?互斥变量在什么时候撤消呢?
    我觉得这样可能不行
      

  5.   

    受efly75的启发,我觉得可以这么做
    每条记录设置一个LastMoifyDateTime字段,
    A,B读的时候都读取LastMoifyDateTime
    A用户Upate时条件为where ID=@ID and LastMoifyDateTime = @LastMoifyDateTime,这时这个条件是成立的.同时A要 把LastMoifyDateTime 进行更新
    这样当B用户提交时where Key=@Key and LastMoifyDateTime = @LastMoifyDateTime,这时这个条件就不成立了,因为数据库里的LastMoifyDateTime已经被A更改过了,@@rowcount应该=0,通知用户就可以了这样写和efly75的方法比较:
    我的方法缺点:多一个字段,浪费宝贵的数据库资源.
    我的方法优点:当一个表的字段很多时我的方法就有优势了,按efly75的方法要where f1=@ and f2=@f2 and f3 =@f3 and .... 这个条件可能会很长,这样就太复杂了点.
      

  6.   

    建议看看martin fowler的《企业应用架构模式》里面对并发问题讲得很清晰,透彻