我有一个复杂的网站,用真钱来处理在线游戏。我为我的交易使用了双重数据库设计,一个简单的例子如下:
约翰存款5美元 约翰获得5000学分 John使用这5000个积分来玩游戏。数据库中的事务如下所示:
trans_id | account_id | trans_type | date | amount |
-----------------------------------------------------
1 | John(PayPal)| Debit | date | -5.00 |
2 | System | Credit | date | 5.00 |
3 | SystemGame | Debit | date | -5000 |
4 | JohnGame | Credit | date | 5000 |
我写了一个存储过程,其中包含一个事务,它插入事务1和2,从John的PayPal帐户借记,以及Credit到我们的系统帐户。
我的问题是,我是否还应该包含John从我们的SystemGame帐户转移到他的游戏帐户的其他交易?或者我应该为每组交易都有一个存储过程?所有4笔交易同时发生,约翰在存入5美元后立即入账。
另外,我应该从真钱交易表中分离游戏积分的交易表吗?
答案 0 :(得分:0)
我认为这就是你想要的。但我建议你在2个不同的交易中分开游戏币和真钱游戏。
唯一的原因是,如果您将来需要更改游戏币管理或实际资金管理,您可以单独进行。
答案 1 :(得分:0)
事务必须是原子的:必须完成所有步骤。如果一个失败,一切都会回滚。
如果您提到的这四个步骤必须一次全部完成,那么它们必须在一次交易中。
所以,对我来说,你目前的方法还可以。
但是,如果要将内容拆分为2个存储过程,则可以使用您使用的语言(PHP,C#)管理事务。
请检查:Transactions in MySQL - Unable to Roll Back和此:PHP + MySQL transactions examples