Mysql中的悲观锁和乐观锁

本文主要了解什么是mysql数据库中的悲观锁以及乐观锁 以及在代码中怎么去集成悲观锁和乐观锁

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

在高并发情况下要安全的修改同一行数据 ,就要保证一个线程在修改时其它线程无法更新这行

记录。一般有悲观锁和乐观锁两种方案~

一、悲观锁?

悲观锁她专一且缺乏安全感了 ,她的心只属于当前事务 ,每时每刻都担心着它 心爱的数据可能被别的事务修改 ,所以一个事务拥有(获得)悲观锁后 ,其他任何事务都不能对数据进行修改啦 ,只能等待锁被释放才可以执行。

 

悲观锁思想就是每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁 当前线程要进来修改数据时 ,别的线程都得拒之门外~ 比如,

可以使用 select…for update ~

select* from User where name=‘jay’ for_update

以上这条 sql 语句会锁定了 User 表中所有符合检索条件( name=‘jay ’)的记

录。本次事务提交之前 ,别的线程都无法修改这些记录。

二、乐观锁?

乐观锁的“乐观情绪 ”体现在 ,它认为数据的变动不会太频繁。因此 ,它允许多

个事务同时对数据进行变动。实现方式:乐观锁一般会使用版本号机制或 CAS

算法实现。

乐观锁思想就是 ,有线程过来 ,先放过去修改 ,如果看到别的线程没修改过, 就可以修改成功 ,如果别的线程修改过 ,就修改失败或者重试。实现方式:乐

观锁一般会使用版本号机制或 CAS 算法实现。

三、在代码中怎么去集成乐观锁? 

1.在字段上加上@Version注解

    /**
     * 版本号,用乐观锁
     */
    @Version
    private Integer version;

2.开启对乐观锁的支持

/**
     * mybatis-plus乐观锁支持
     * @return
     */
@Bean
public MybatisPlusInterceptor optimisticLockerInterceptor(){
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}