MySQL数据库收支明细表数据报表
收支明细表设计
1. 表结构设计
表名:t_account_transaction
字段名 | 数据类型 | 约束 | 描述 |
transaction_id | bigint(20) | PRIMARY KEY | 交易ID,自增 |
account_id | int(11) | NOT NULL | 账户ID |
amount | decimal(8,2) | NOT NULL | 交易金额 |
type | varchar(64) | NOT NULL | 交易类型(收入/支出) |
source | varchar(256) | 交易来源 | |
remark | varchar(256) | 备注 | |
pay_time | datetime | NOT NULL | 交易时间 |
2. 示例SQL语句
CREATE TABLE t_account_transaction ( transaction_id BIGINT(20) UNSIGNED AUTO_INCREMENT PRIMARY KEY, account_id INT(11) NOT NULL, amount DECIMAL(8,2) NOT NULL, type VARCHAR(64) NOT NULL, source VARCHAR(256), remark VARCHAR(256), pay_time DATETIME NOT NULL ) ENGINE=InnoDB;
事务管理与数据一致性
1. 事务的概念和边界
事务的边界:事务从连接到数据库并执行第一条DML语句开始,到提交或回滚结束,提交使用COMMIT
,回滚使用ROLLBACK
。
事务的原理:数据库为每个客户端维护一个独立的缓存区(回滚段),只有所有SQL语句均成功执行(COMMIT
),才会将数据同步到数据库;否则会进行ROLLBACK
。
2. 事务的特性(ACID)
原子性(Atomicity):事务内的所有操作要么全部成功,要么全部失败。
一致性(Consistency):事务内的操作必须保证数据的一致性。
隔离性(Isolation):事务查看的数据要么是修改前状态,要么是修改后状态。
持久性(Durability):事务完成后,其对系统的影响是永久性的。
数据报表生成
1. 收入与支出统计
按月统计收款金额
SELECT MONTH(pay_time) AS month, YEAR(pay_time) AS year, SUM(amount) AS total_amount FROM t_account_transaction WHERE type = '收入' GROUP BY MONTH(pay_time), YEAR(pay_time);
按月统计付款金额
SELECT MONTH(pay_time) AS month, YEAR(pay_time) AS year, SUM(amount) AS total_amount FROM t_account_transaction WHERE type = '支出' GROUP BY MONTH(pay_time), YEAR(pay_time);
2. 用户余额统计
查询用户余额
SELECT account_id, SUM(amount) AS balance FROM t_account_transaction GROUP BY account_id;
案例分析
1. 模拟转账操作
步骤:
1、开启事务。
2、执行减钱操作。
3、执行加钱操作。
4、提交事务。
示例代码:
START TRANSACTION; UPDATE t_account_transaction SET amount = amount 1000 WHERE account_id = 1; UPDATE t_account_transaction SET amount = amount + 1000 WHERE account_id = 2; COMMIT;
2. 异常处理
模拟转账错误:
在减钱成功后,加钱失败的情况。
START TRANSACTION; UPDATE t_account_transaction SET amount = amount 1000 WHERE account_id = 1; 假设此处出错,加钱操作未执行 发生异常后执行回滚 ROLLBACK;
优化建议
1、避免浮点数计算:金钱计算应尽量避开浮点数,建议以分为单位存储金额。
2、高并发场景:对于高并发场景,可以使用消息队列来处理收入和支出操作,确保数据一致性。
3、日志记录:涉及金钱的操作应详细记录日志,以便审计和问题排查。
通过以上设计和实现,可以确保MySQL数据库中的收支明细表具备良好的结构和高效的数据处理能力,同时保证数据的一致性和完整性。
序号 | 日期 | 收入/支出 | 金额(元) | 项目描述 | 账户类型 | 备注 |
1 | 20230101 | 收入 | 1000.00 | 销售收入 | 银行账户 | |
2 | 20230102 | 支出 | 200.00 | 办公用品采购 | 现金账户 | |
3 | 20230103 | 收入 | 1500.00 | 投资收益 | 股票账户 | |
4 | 20230104 | 支出 | 300.00 | 员工工资 | 银行账户 | |
5 | 20230105 | 收入 | 500.00 | 预收款 | 预收款账户 | |
6 | 20230106 | 支出 | 400.00 | 广告费 | 银行账户 | |
7 | 20230107 | 收入 | 1200.00 | 销售返利 | 银行账户 | |
8 | 20230108 | 支出 | 500.00 | 采购退货 | 银行账户 | |
9 | 20230109 | 收入 | 800.00 | 网络广告收入 | 银行账户 | |
10 | 20230110 | 支出 | 700.00 | 运费 | 银行账户 |
表格只是一个示例,实际的数据报表可能需要根据实际业务需求添加更多的字段,例如分类、供应商、客户等,表格中的数据也是虚构的,仅用于展示可能的报表格式。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1188479.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复