个人都选择自己的数据到临时表。只有update者才更新实际数据就可以了。

解决方案 »

  1.   

    别的人是否要判断临时表里是否有已经被选取的?update结束以后临时表里的内容是否需要更新?
      

  2.   

    MySQL不太清楚
    Postgresql可以用锁表实现的
    MySQL没有事务的概念吗?
      

  3.   

    mysql有事物功能。能把具体细节告诉我一下吗?用什么隔离级?锁定一条记录别人就不能选中这条记录进行更新。
      

  4.   

    Oracle or PostgreSQL:begin(事务开始)
    select * from table where ... for update( no wait);
    update...
    delete...
    insert...
    commit
    end(事务结束)
      

  5.   

    问题是,在这个事务的过程中别人是可以update这个记录的,只不过要等这个事务结束了。我希望的是在这个事务开始以后别人就无法选择这个记录进行update。
      

  6.   

    那就不要no wait嘛
    第二个用户更新时,发现已有用户在使用,就马上返回消息啦如果你的事务都结束了,还不允许别人更新,那也太狠了点儿吧
      

  7.   

    刚才错了,是应该要no wait
      

  8.   

    no wait 就是不等待
    第二个执行的事务发现该数据被lock后,不会等待第一个处理结束后再更新
    它会马上返回消息,而不能更新数据这样应该比较好些
    最开始应该已经把该数据读出了,要做交费处理时
    先select * form table for update no wait
    然后比较一下内容是否变化
    没有就update
    有就返回消息,要用户确认就是第一次数据读取和交费处理之间肯定是有不定时间间隔的,只有通过数据内容来判断
      

  9.   

    楼上的处理思想是正确
    这是保证交互性和完整性的最佳处理方法
    VFP,PB和DEPHI里的远程更新都是用这种比较新旧的方法。MYSQL 里没有NOWAIT,也用不着NOWAIT。
    因为这个事务中没有交互性的等待,速度很快,即使遇到一些死锁
    也可以通过设置innodb_lock_wait_timeout 来避免。