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