系统中两个不同用户登录,进行同样的操作,添加数据。怎么锁住表,以防垃圾数据的添加。比如添加一条数据,两个用户添加的数据ID相同,更新的时候同时读取。我看了一些资料,有锁表,锁行,锁数据库的。不过好像不同的引擎支持不同的锁操作。

解决方案 »

  1.   

    mysql_query('LOCK TABLES real_table WRITE, insert_table WRITE');
    //这里执行插入数据操作
    mysql_query('UNLOCK TABLES');
      

  2.   

    可以加个version字段读取的时候把version一起读出,更新的时候,比对version。。如果一致,就允许更新并将version+1否则,说明别人更新,数据覆盖过,更新失败……
      

  3.   

     加锁
    $locktable="lock tables `productbatch`";
       $db->ExecuteSQL($locktable);//插入语句,更新语句解锁
     $unlocktable = "UNLOCK TABLES `productbatch`";
    $db->ExecuteSQL($unlocktable);
    这样可以吗?
      

  4.   

    只在 update 时才考虑加锁比如添加一条数据,两个用户添加的数据ID相同
    当id为自增字段时,这种情况不会发生。否则就不叫数据库了