MYSQL select时锁定记录问题

土豆是我的最爱 2020-08-17 04:14:25
在使用SQL时,大都会遇到这样的问题,你Update一条记录时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。

但当以上操作放到多线程中并发处理时会出现问题:某线程select了一条记录但还没来得及update时,另一个线程仍然可能会进来select到同一条记录。

请问应该符合解决
...全文
2252 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kris2088 2020-08-18
  • 打赏
  • 举报
回复
每条记录加一个版本号,防止脏数据是个办法
亦夜 2020-08-17
  • 打赏
  • 举报
回复
其实没太明白你的意思,你想通过select出来的值来进行更新,但是你在更新操作还没成功的同时又进行了select操作,那么这有什么问题呢,写和读着两者并不冲突,如果你是希望第二个读 读取到的是前一个写操作后的最新值,那你完全可以在执行update的时候锁住当前表,但是如果你的并发较高,这不是可取的办法,或者你可以通过乐观锁给表增加版本号,写操作会导致版本增加,读操作可进行对比版本是否变化,来判断是否是最新数据,但是这有依旧无法第一时间获取到最新数据,可以通过让写操作返回值的方式来判断数据是否更新来进行查询
  • 打赏
  • 举报
回复
配置数据库事务的隔离级别为SERIALIZABLE,同时为所有数据库操作开启事务

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧