解决方案 »

  1.   

    1. 看一下MySQL事务隔离性相关的东西你应该能找到答案。
    2. InnoDB是行锁,如果在不同的事务中修改同一行数据,则第二个Update会卡在那里,直到第一个加锁处理(Update 或者 SELECT xxx FOR UPDATE )的事务提交或回滚。
      

  2.   


    1、select num where id=1 后面要加上 for update 
    2、你在更新它值的时候,要把看到的旧值50元当做参数来判断
    更新时应该类似这样的事务:
    start transaction
    select X_VALUE from where id=xxx for update
    IF X_VALUE<>50
        ROLLBACK
        return 
        值已变化,出错返回
    ENDIF
    UPDATE     SET X_VALUE=X_VALUE+50 WHERE ID=XXX
    COMMIT
      

  3.   

    嗯楼上的回答准确一些
    SELECT xxx FOR UPDATE 是精髓啊。。
      

  4.   


    不会,没有commit这行就一直加着排他锁
    2
    你需要一个select for update语句锁定这一行 然后更新