# 转账`python`脚本说明

## 功能
该脚本模拟简易转账交易，一个事务中包含两个`update`-转账、两个`insert`-流水。交易结束后进行平账验证。  

涉及如下两张表：`account`、`customer_flow`

脚本集成了`DDL`创建、造数、转账执行、平账流程，只需配置参数即可。
可以在转账阶段制造数据库异常，验证`ACID`。

## 程序流程

### 创建数据库
创建数据库 tiacid ，并在数据库创建两张表：account 、customer_flow。
### 造数
1. 每次灌数前都会执行 ` drop database if exists tiacid`，删除可能已存在的数据。  
2. 灌数阶段只涉及到加载 account 表数据，customer_flow 表不需要初始化数据。
3. account 数量为 `[datafornum] * [batchsize] `。 
4. datafornum 为插入循环次数，batchsize 为每次批量插入的 insert 数量。
5. balance 的 默认值为 1000。
### 转账
1. 随机挑选 account 表中的两个账号进行转账，一个事务两个 update ，两个 insert，随后 commit。
2. 每次转账的金额为固定值0.1。
3. 如果发生异常，则发起 rollback。
4. 使用参数 [ threadnum ] 来设置交易线程数量。

### 平账
1. account 表的所有 account 总金额应该保持不变。
2. customer_flow 表的数据条目应为交易量 * 2

## 参数说明
- host - ip
- port - 端口
- user - 数据库用户
- passwd - 数据库密码
- db - 数据库名（默认用 test 即可）
- transferdb - 程序使用的数据库名
- charset - 字符集
- datafornum - 插入数据循环次数
- batchsize - 批量插入的数据量
- transferfornum - 每个线程执行的转账次数
- threadnum - 线程数
- balance - 初始卡余额



