mysql应用于财务_MySQL事务与会计应用程序

我有一个如下表:

transaction_id

user_id

other_user_id

trans_type

amount

此表用于维护财务类型应用的帐户交易.

它的双重记录会计,因此从用户A到B的转移会在表格中插入两行,如图所示.

1, A, B, Sent, -100

1, B, A, Received, 100

任何帐户的余额都是通过汇总该帐户的交易来计算的.

例如:

select sum(amount) from transactions where user_id=A

锁定资金转移的最佳方法是什么?我目前的代码如下:

Start Transaction

Debit the sender's account

check the balance of the sender's account

if new balance is negative then the sender didn't have enough money and rollback

if the balance is positive then credit the receiver and commit

这似乎与预期完全不同.我在网上看到很多关于基本上说的交易的例子:开始,借记发送者,信用接收者,提交.但检查发件人之间的平衡的最佳方法是什么?

我有交易通过,不应该.假设一个用户有3K的余额,并且两个交易在3K完全同时进入,当这两个交易只有一个时,它们都会通过.

谢谢

解决方法:

您使用的是InnoDB表还是MyISAM表? MySQL不支持MyISAM表上的事务(但如果你尝试使用它们,它不会给你一个错误).另外,请确保您的事务隔离级别设置正确,它应该是SERIALIZABLE,这不是MySQL的默认值.

这个article有一个很好的例子,它使用一个非常类似于你的例子来解释不同隔离级别的影响.

标签:mysql,transactions

来源: https://codeday.me/bug/20190527/1161147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值