1 批量生成测试数据

可以使用数据库的存储过程

1.1 批量生成数据

CREATE PROCEDURE wallet.CreateBatch (IN createNum INT)
BEGIN
DECLARE i int default 0;

SET autocommit=0;-- 禁止自动提交

while i<createNum do
set @orderNo = UUID();
select @orderNo;
INSERT INTO `bandc_account` (`acct_no`, `account_type`, `account_status`, `account_purpose`, `current_balance`, `enable_balance`, `frozen_amount`, `frozen_unrecharge`, `frozen_withdraw`, `initial_balance`, `recharge_balance`, `total_recharge_amount`, `total_transfer_amount`, `total_withdraw_amount`, `withdraw_balance`, `external_user_source`, `external_user_id`, `version`, `created_time`, `created_user`, `updated_time`, `updated_user`, `note`)
VALUES
(@orderNo, 0, 2, 1, 10000.00, 10000.00, 0.00, 0.00, 0.00, 0.00, 10000.00, 10000.00, 0.00, 0.00, 0.00, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL);

set i=i+1;
end while;
COMMIT;-- 提交事务

END

1.2 验证结果

CREATE PROCEDURE wallet.checkValue (IN fromInitAmount INT, IN targetAcctNo VARCHAR(32))
BEGIN
-- 变量定义, 与客户端工具中显示的数据类型一致
DECLARE eb decimal(19,2) default 0.00;

DECLARE tta decimal(19,2) default 0.00;
DECLARE ttaSum decimal(19,2) default 0.00;
DECLARE totalTransAmount decimal(19,2) default 0.00 ;
DECLARE targetFrozenAmount decimal(19,2) default 0.00;
DECLARE fromAcountCount int default 0;


-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;

-- 游标
DECLARE cur CURSOR FOR (
-- select中的获取的列
-- 在下面 FETCH cur INTO eb中赋值时的顺序一致
-- 注意这里eb和enable_balance不同, 如果相同数据将无法得到
select enable_balance, total_transfer_amount from wallet.bandc_account where account_purpose = 1 and acct_no != targetAcctNo
)
;


-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
-- 打开游标
OPEN cur;

-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO eb, tta;

-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
set totalTransAmount = totalTransAmount + (fromInitAmount - eb);
set ttaSum = ttaSum + tta;
END LOOP;
-- 关闭游标
CLOSE cur;

select frozen_amount into targetFrozenAmount from bandc_account where acct_no = targetAcctNo;

select count(*) into fromAcountCount from wallet.bandc_account where account_purpose = 1 and acct_no != targetAcctNo;
-- 使用命令行进入mysql后调用存储过程可以看到通过此句打出的数据
select fromAcountCount;

select totalTransAmount, targetFrozenAmount, totalTransAmount = targetFrozenAmount, ttaSum = targetFrozenAmount;

END