>  기사  >  백엔드 개발  >  有个问题困惑了好久,关于mysql表的设计

有个问题困惑了好久,关于mysql表的设计

WBOY
WBOY원래의
2016-06-06 20:21:431348검색

我现在有个业务需要,就是账户余额的问题,怎么去设计这个账户余额的表呢?
简单的update更新余额显然是行不通的
如果用户在pc端,移动端操作余额,很有可能发生错误
难道必须用事务吗?

回复内容:

我现在有个业务需要,就是账户余额的问题,怎么去设计这个账户余额的表呢?
简单的update更新余额显然是行不通的
如果用户在pc端,移动端操作余额,很有可能发生错误
难道必须用事务吗?

事务并不是必须的,但是事务是最简单、最清晰、最方便的实现方法。你可以通过其他一些状态转换来实现对余额操作的正确性,不过整个状态转换相当复杂,比较麻烦,而且即使你弄出来这套状态转换流程,其实你无非就是自己做了个事务系统。

这个跟事务没啥关系吧,你说的应该是锁吧。其实
你要解决的问题只有一个:同步安全问题,解决方法两种:

1.使用数据库提供的锁
每次对余额进行操作之前先对余额进行加锁(行锁,for update),然后就可以随意操作了,记得最后提交事务即可(会自动释放锁,注意MySQL不要开启自动提交事务)

2.应用程序自己提供锁
如果不管是PC端还是移动端对余额的操作都走同一个接口,那么直接在该接口中使用分离锁(针对每个用户一个锁)对需要进行余额操作的请求进行加锁即可。
如果走的不是同一个接口,那么就需要分布式锁了,redis有一个方案可提供分布式锁,可以参考Redis官方给出的一个方案:用Redis构建分布式锁

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.