程序员过关斩将——数据库的乐观锁和悲观锁并非真实的锁( 八 )

乐观锁

乐观锁认为一般情况下数据不会造成冲突 , 所以在数据进行提交更新时才会对数据的冲突与否进行检测 。 如果没有冲突那就OK;如果出现冲突了 , 则返回错误信息并让用户决定如何去做 。 类似于 SVN、GIt这些版本管理系统 , 当修改了某个文件需要提交的时候 , 它会检查文件的当前版本是否与服务器上的一致 , 如果一致那就可以直接提交 , 如果不一致 , 那就必须先更新服务器上的最新代码然后再提交(也就是先将这个文件的版本更新成和服务器一样的版本)

乐观锁是一种程序的设计思想 , 通过一个标识的对比来决定数据是否可以操作 , 现在普遍的做法是给数据加一个版本号或者时间戳的方式来实现乐观锁操作过程:

在表中设计一个版本字段 version , 第一次读的时候 , 会获取 version 字段的取值 。 然后对数据进行更新或删除操作时 , 会执行UPDATE ... SET version=version+1 WHERE version=version 。 此时如果已经有事务对这条数据进行了更改 , 修改就不会成功 。

推荐阅读