数据库并发更新数据安全性问题

2019-01-02 22:59发布

    有一个问题就是,比如有一个字段是剩余金额,限制要加钱,但是又两个线程同时调用+100块钱,如果采用先读取余额,再把加好的钱set进去的,这肯定会出问题。第一个修改完了之后,第二个是在旧的值上加100,其实等于只加了100,而不是加200。这属于什么类型的问题。

    我能想到的解决方法就是,要不然就是在sql中写出amount=amount+xxx的方法去修改字段,或者要不然就是在这个业务方法上加锁。但是不知道这两种方法会不会有别的什么问题。

    不知道大家有没有什么好的,或者已经很成熟的现成的解决方案。

5条回答
我欲成王,谁敢阻挡
2楼-- · 2019-01-02 23:17

在单机数据库下,可以先用select * from table for update; 比如mysql在可重复的的隔离级别下,自带的next-key lock是可以解决这种问题的。

查看更多
放荡不羁爱自由
3楼-- · 2019-01-02 23:17

锁机制, 悲观锁

查看更多
你好瞎i
4楼-- · 2019-01-02 23:20

这个问题很复杂,每个解决方案都有一些问题,就看你能接受哪些问题了。

建议自行查阅有关数据库锁冲突解决相关的文档。

这样你才知道某个解决方案有什么副作用,什么后遗症。

查看更多
啃猪蹄的小仙女
5楼-- · 2019-01-02 23:21

悲观锁aaa

查看更多
做自己的国王
6楼-- · 2019-01-02 23:36

update qian+=100 where qian=50

查看更多
登录 后发表回答