mysql - 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% 确保平衡始终正确的最佳做法是什么?
带有锁或触发器或其他东西的存储过程?
解决方案
我会为该任务使用视图。保证最新数据,因为在查询视图时,它后面的查询会被执行,因此它会重新计算您的余额。
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;
推荐阅读
- django - 视差无法正常运行:Django
- centos - 我更改root的文件许可
- python - 如何使用python正确关闭Windows中的进程?
- prolog - 一桌六席
- javascript - 如何在Javascript中为每种颜色生成3种颜色?
- postman-collection-runner - 纽曼:运行 URL 收集时出现验证错误
- symfony - Symfony4 JMS\Serializer\SerializedName 将在 deserialize() 上被忽略
- javascript - 已发布的 Expo 应用程序无法拨打网络电话
- azure-devops - ReportGenerator 缺少“代码覆盖率”选项卡(Azure DevOps Server 2019.0.1)
- sql - 存储过程返回 超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)