本文主要了解什么是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; }