表a 比如只有一条数据
id  value
1     102操作是,从a表取出数据,记录到下面的log表,然后a表的数据的value加1表b是log表,记录一些操作的log
logid   a_id    value
  1       1       100
  2       1       101=================================================================以上log数据为正常情况,现在有这样的情况并发两个请求
从a表取到的value值都102
然后记录到b表的两条数据为
logid   a_id   value
  3      1      102
  4      1      102a表的sql因为是用 update a set value=value+1 这样的sql所以a表会得到正确的值id    value
1      104
==============================================这种情况下b表中的log是不对的,正确应该是下面的情况
logid   a_id   value
  3      1      102
  4      1      103
==============================================
请问,我要怎么做,我不想使用排他锁这种机制,因为会严重影响程序运行的效率。

解决方案 »

  1.   

    核心是你查入b表的SQL语句是怎么样的呢?找到该SQL语句然后在插入以前判断VALUE是否应该+1!
      

  2.   

    $sql = "insert into b select * from a ; update a set value=value+1; "
    mysql_query($slq);
    搞定。
      

  3.   

    插入语句是 insert b (a_id,value) values ($aid, $value+1);$aid和$value都是通过select从a中选出来的
      

  4.   


    您这个,我只能说,我现在具体应用中试试
    因为具体应用中,并不像我的例子那样简单,字段结构更复杂,而且select 和 insert之间还有好多处理要做,insert和update中间也还有好多处理.我现在就改改看看行不行得通