zoukankan      html  css  js  c++  java
  • php mysql 丢失更新

    php mysql 丢失更新问题,搜索整个互联网,很少有讲到,也许和php程序员出身一般都是非科班出身有关系吧。

    另外php程序一般都是简单数据,很少有并发一致性问题,所以大家都没有谁专门提出这个问题。

    这个问题无法依靠数据库的并发机制进行控制,因为不是一回事。

    丢失更新:(Lost Update) 
    事务T1读取了数据,并执行了一些操作,然后更新数据。事务T2也做相同的事,则T1和T2更新数据时可能会覆盖对方的更新,从而引起错误。

    这里的事务不是指的数据库事务。

    可以理解成两个不同的客户端。

     

    举例:

    在时间T1

     

    PC机1 客户读到一条 message      | pc机2 客户读到同一个message

    修改                            | 修改

    时间t2

    保存                          时间t3

                                | 保存

    =========================

     

    请问这个时候数据库里面应该以谁保存的为准?

    =============================

    这个问题,只出现在多用户环境,并且多用户修改一个数据库记录。

    解决这个问题有两种方式:

    方法1, 简单数据,直接用 where 语句,加自己读到的old 数据作为条件,防止其他用户更新了

    自己覆盖其更新。

     

    方法2是,复杂数据,用一个integer ,或者longint字段version,控制版本。

    每次更新的时候,执行:

    update table1 set version=version+1 where version=修改前的version

     

     控制了这个问题,会可能导致后更新的用户操作失败。

    处理方式有两种:

    直接刷新出最新记录。

    提示用户更新失败,手动刷新最新记录。

     

     

     

     

     

     

  • 相关阅读:
    关于CG Relighting系统设计的片言碎语
    [F&Q:How To Learn Computer Graphic]如何学习计算机图形学
    以后再也不写英文的文章了
    [D80]天井
    [应邀发布]Rapidmind Development Platform Download
    vs2008 结构体托管
    换实验室
    3D
    【入门】点击按钮添加输入框
    【入门】PHP与数据库连接
  • 原文地址:https://www.cnblogs.com/stevenlaz/p/3272790.html
Copyright © 2011-2022 走看看