mysql乐观锁和悲观锁初认知

1、悲观锁

1-1、概念 :它指的是对数据被外界(包括当前系统的其它事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。

1-2、悲观锁的实现方式 :

1-2-1、首先设置mysql的提交方式为非自动提交(手动提交):set autocommit=0;

1-2-3、手动开启事务,select... ...for update;手动提交事务。

例子:

       mysql乐观锁和悲观锁初认知

2、乐观锁

2-1、概念:乐观锁相对悲观锁而言,它认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回错误信息,让用户决定如何去做。

2-2、乐观锁的实现方式(CAS):

    2-2-1、为表中添加一个 version 字段。

    2-2-2、当读取数据时,连同这个 version 字段一起读出。

    2-2-3、数据每更新一次就将此值加一。

    2-2-4、当提交更新时,判断数据库表中对应记录的当前版本号是否与之前取出来的版本号一致,如果一致则可以直接更新,如果不一致则表示是过期数据需要重试或者做其它操作。

    例子:

    select  当前版本号 from employee where xxx=xxxx;

     UPDATE employee SET money = #{期待值}, version = #{当前版本号} + 1 WHERE id = #{e.id} AND #{当前版本号} = version

 

参考链接:https://www.cnblogs.com/cyhbyw/p/8869855.html