page contents

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

轩辕小不懂 发布于 2021-06-19 11:54
阅读 1277
收藏 0
分类:数据库
  • SQL
  • 1080
    Pack
    Pack

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

    使用悲观锁

    悲观锁思想就是,当前线程要进来修改数据时,别的线程都得拒之门外~

    比如,可以使用select…for update ~

    select

    from

    User

    where

     name

    =‘

    jay

    for

     update

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

    使用乐观锁

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

    请先 登录 后评论