update table set a = a+1

解决方案 »

  1.   

    正如楼上所说在你写SQL时一定要使用相对引用,+--------+
    |A       |
    +--------+
    |12      |
    +--------+两个用户同时读出A列值为 12甲:UPDATE table1 SET A = 12+1;
    ->
    +--------+
    |A       |
    +--------+
    |13      |
    +--------+乙:UPDATE table1 SET A = 12+1;
    ->
    +--------+
    |A       |
    +--------+
    |13      |
    +--------+只有下面的才正确
    甲:UPDATE table1 SET A = A+1;
    ->
    +--------+
    |A       |
    +--------+
    |13      |
    +--------+乙:UPDATE table1 SET A = A+1;
    ->
    +--------+
    |A       |
    +--------+
    |14      |
    +--------+
    这在多用户系统
    如果应用了事务处理,
    甲先锁定表,再读A列,接着更新A列,解锁表
    乙锁定表,再读A列,接着更新A列,解锁表A列的数值才能正确所以在多用户系统中,强烈建议使用
    UPDATE table1 SET A = A+1;
    不论有没有使用事务处理
      

  2.   

    谢谢各位了,但我忘了说明,两个用户首先都执行了select,都得到了一个数值(可以认为是单号吧),如果存到数据库里以后就有一个用户的单号不同,那样的话会引起很多麻烦,请各位高手在指点一下啊
      

  3.   

    呵呵,
    前面我已说了,
    要么用事务处理,
    :》
    在MySQL中可以加读写锁表,
    对于单号的处理,我一般在客户端进行计算的,
    因客户端的发票编号已确定,
    你也可以在客户端放一个INI文件,
    专用于保存单号呀,
    每单处理完毕,再将单号写入数据库中