首页 > 解决方案 > Mysql 交易和余额

问题描述

所以我在 MySQL 中有这张表,里面有用户信息:

[             USERS           ]
[id | name |  email  | balance]
[ 1 | A    | a@e.com |    0   ]
[ 2 | B    | b@e.com |    0   ]
[ 3 | C    | c@e.com |    0   ]

和一张交易表

[           TRANSACTIONS         ]
[id | user_id | product |  amount  | price ]
[ 1 |       3 |TV 600   |       1  | 279,22]
[ 2 |       2 |Radio G  |       1  |  32,12]

我想要的是,如果我在表中添加一行,transactions用户balance的 也会更新。100% 确保平衡始终正确的最佳做法是什么?

带有锁或触发器或其他东西的存储过程?

标签: mysqlsqlstored-procedurestriggers

解决方案


我会为该任务使用视图。保证最新数据,因为在查询视图时,它后面的查询会被执行,因此它会重新计算您的余额。

create view MyCalculatedView as
select u.id, u.name, u.email, t.balance from USERS u
left join (
    select user_id, sum(price) as balance
    from TRANSACTIONS
    group by user_id
) t on u.id = t.user_id;

推荐阅读