相信大家有的时候测sql性能的时候需要批量造数据,一条条插入插入插到累死也不可能插完,所以现在存储过程就可以帮我们大忙了:
创建表的结构sql语句:
CREATE TABLE `recon_trade_auth_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `trade_order_no` varchar(30) NOT NULL COMMENT '交易认证订单号', `mer_order_no` varchar(64) NOT NULL COMMENT '商户交易认证订单号', `mer_no` varchar(64) DEFAULT NULL COMMENT '商户号', `mer_name` varchar(64) DEFAULT NULL COMMENT '商户名称', `pro_no` varchar(32) DEFAULT NULL COMMENT '产品编码', `pro_name` varchar(64) DEFAULT NULL COMMENT '产品名称', `order_time` datetime DEFAULT NULL COMMENT '交易时间', `auth_status` tinyint(4) DEFAULT NULL COMMENT '认证状态(1:待认证,2:认证成功,3:认证失败,4:认证未知)', `fee_amt` decimal(16,4) DEFAULT NULL COMMENT '费用金额', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `extend1` varchar(255) DEFAULT NULL COMMENT '扩展字段1', `extend2` varchar(255) DEFAULT NULL COMMENT '扩展字段2', `extend3` varchar(255) DEFAULT NULL COMMENT '扩展字段3', PRIMARY KEY (`id`), UNIQUE KEY `unique_index_1` (`trade_order_no`), KEY `index_select_2` (`mer_no`,`pro_no`,`auth_status`), KEY `index_select_3` (`mer_order_no`), KEY `index_select_4` (`order_time`) ) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8 COMMENT='认证类交易订单信息';
接下来我就需要写造数据的存储过程以及调用存储过程的sql:
delimiter // DROP PROCEDURE IF EXISTS proc_buildata; CREATE PROCEDURE proc_buildata(IN loop_times INT) BEGIN DECLARE var INT DEFAULT 100; WHILE var<loop_times DO SET var=var+1; INSERT INTO recon_trade_auth_order ( `id`, `trade_order_no`, `mer_order_no`, `mer_no`, `mer_name`, `pro_no`, `pro_name`, `order_time`, `auth_status`, `fee_amt`, `create_time`, `update_time`, `extend1`, `extend2`, `extend3` ) VALUES ( var, var+1, 'yhsy0011', 'C1100003050700000004', '测试商户', 'P0100000000010', '借记卡四要素认证', '2017-7-19 15:23:26', 2, NULL, '2017-7-5 16:08:00', '2017-7-5 16:08:00', NULL, NULL, NULL ); END WHILE; END // delimiter; CALL proc_buildata(100000);