在一个存储过程中分组事务,还是分成两个存储过程?

时间:2012-08-08 14:37:39

标签: mysql database database-design

我有一个复杂的网站,用真钱来处理在线游戏。我为我的交易使用了双重数据库设计,一个简单的例子如下:

约翰存款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美元后立即入账。

另外,我应该从真钱交易表中分离游戏积分的交易表吗?

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要的。但我建议你在2个不同的交易中分开游戏币和真钱游戏。

唯一的原因是,如果您将来需要更改游戏币管理或实际资金管理,您可以单独进行。

答案 1 :(得分:0)

事务必须是原子的:必须完成所有步骤。如果一个失败,一切都会回滚。

如果您提到的这四个步骤必须一次全部完成,那么它们必须在一次交易中。

所以,对我来说,你目前的方法还可以。

但是,如果要将内容拆分为2个存储过程,则可以使用您使用的语言(PHP,C#)管理事务。

请检查:Transactions in MySQL - Unable to Roll Back和此:PHP + MySQL transactions examples