求助个问题
[11:44:11] .لaлlι: 事务开始:
    查询一最大值(数字)
    插入一条数据,同一字段值设置为(第一步最大值 + 1)
提交事务
[11:44:43] .لaлlι: 这会有个线程同步问题,比如线程1,2同时查到最大值为10,则可能同时 INSERT 11
[11:45:05] .لaлlι: 而我不能把字段配置成“unique", 因为业务的原因
[11:45:13] .لaлlι: 求助诸位,先谢谢
[11:47:04] .لaлlι: C语言我知道可以弄LOCK锁函数,但是我想以数据库的方式,不知道有没有解决办法。比如,有没有办法让事务一开始,自动锁定,其他线程进入事务只能等待如果描述不清,我还是举例算了,表有 产品和 版本两字段
产品,版本
——————————————————————
产品A,1
产品A,2
产品XX,1
产品YY,1
产品YY,2
产品YY,3如果两个事务同时查到产品A的最大版本2,则同时INSERT (产品A,3)明显就有问题。

解决方案 »

  1.   

    可以直接用一句sql来完成你的操作mysql> create table test1(a int) ;
    Query OK, 0 rows affected (0.00 sec)mysql> insert into test1 values(1);
    Query OK, 1 row affected (0.00 sec)mysql> create table test2(a int);
    Query OK, 0 rows affected (0.00 sec)mysql> insert into test2 values((select a from test1)+1);
    Query OK, 1 row affected (0.00 sec)mysql> select * from test2;
    +------+
    | a    |
    +------+
    |    2 |
    +------+
    1 row in set (0.00 sec)
      

  2.   

    insert into test2 values((select max(a) from test1)+1);
      

  3.   


    你说的方式确实可以,但是我是为了描述问题,才把问题说的很简单,只有一个NUM。
    真实的业务相当复杂,我关心是事务中的同步(就先查询,后插入)。