当前位置:   article > 正文

在高并发情况下,如何做到安全的修改同一行数据_并发更新同一条数据

并发更新同一条数据

要安全的修改同一行数据,就要保证一个线程在修改时其它线程无法更新这行记录。
一般有悲观锁和乐观锁两种方案~

使用悲观锁

悲观锁思想就是,当前线程要进来修改数据时,别的线程都得拒之门外~比如,可以使用 select…for update ~

select * from User where name=‘abc’ for update
  • 1

以上这条 sql语句会锁定了 User表中所有符合检索条件(name=‘abc’)的记录。本次事务提交之前,别的线程都无法修改这些记录。

使用乐观锁

乐观锁思想就是,有线程过来,先放过去修改,如果看到别的线程没修改过,就可以修改成功,如果别的线程修改过,就修改失败或者重试。
实现方式:乐观锁一般会使用版本号机制或 CAS算法实现

数据库的乐观锁和悲观锁

悲观锁

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

在这里插入图片描述


乐观锁:

乐观锁的“乐观情绪”体现在,它认为数据的变动不会太频繁。因此,它允许多个事务同时对数据进行变动。实现方式:乐观锁一般会使用版本号机制或 CAS算法实现。
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/387197
推荐阅读
相关标签
  

闽ICP备14008679号