有关乐观锁的实现方式,version的获取问题
用MySQL的默认隔离级别,可重复读,采用version=1,2,3,4.....来实现乐观锁的,当两个线程A,B同时操作数据库的一行记录,如果都是先开启事务,然后都是先查询出数据,比如说如下A,B来个线程查询结果如下:
Table :person
A:id name version
1 tom 1
B:id name version
1 tom 1
此时A线程先开更新数据
update set name='jack' ,version =version+1 where id=1 and version =1
然后A线程提交事务。
然后B线程也要更新name的值,但是此时的B线程在查询select * from person
得到的结果肯定是
B:id name version
1 tom 1
此时如果B也要更新name的值,那么B线程要获取version的值是如何获取的呢,通过查询肯定不行,因为查询结果如上,那么是在java代码里面把每次更新过后的version值通过方法的参数传递给B线程吗。即我们在控制version都是通过java代码来获取version的值,而不是通过在数据库中查询相应的version值吗。
在网上查的资料都是笼统的说,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,但是如何获取更新过后的version还是没有说明白。请教大神