场景
两个线程,比如线程A,线程B,同时取id=1得记录。这个时候两个线程获取的版本号都是1。
接下来,线程A修改了name和version自增,提交事务。这个时候update的语句应该如下:
update 表 set name=’开发’ ,version=version+1 where id=1 and version =1 ,执行成功 后数据库表的id=1这条记录versoin=2了。
在接下来,由于线程B动作比较慢,等线程A已经提交了,然后执行Update
update 表 set name=’全栈’ ,version=version+1 where id=1 and version =1, 发现执行不了了。失败。
名词解释
1.悲观锁
当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制【又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”】。
2.乐观锁
乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候ÿ