构造方法
方法一:存储过程
创建测试表
文本内容:
CREATE TABLE test_db.t_offline_activity (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`project_id` varchar(64) NOT NULL DEFAULT '' COMMENT '项目id',
`activity_type` int(20) NOT NULL DEFAULT 0 COMMENT '类型',
`activity_id` varchar(32) NOT NULL DEFAULT '' COMMENT '活动id',
`activity_name` varchar(32) not null DEFAULT '' comment '活动名称 ',
`start_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '活动开始时间',
`end_time` datetime not null default CURRENT_TIMESTAMP comment '活动结束时间',
`risk_strategy` varchar(128) not null DEFAULT '' comment '策略,0-不处理 1-滑块 2-禁止json格式{"low":0,"high":0}',
`status` tinyint(4) not null default 0 comment '活动状态:0-正常,-1-删除',
`creator` varchar(32) not null default '' comment '操作人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_activity_id` (`activity_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表';
创建存储过程
文本内容:
delimiter //
CREATE PROCEDURE Insert_t_offline_activity(IN init INT, IN num INT)
BEGIN
DECLARE Var INT;
DECLARE ID INT;
SET Var = 0;
SET ID = init;
WHILE Var < num DO
insert into t_offline_activity(id, project_id, activity_type, activity_id, activity_name, start_time, end_time, risk_strategy, status, creator, create_time, update_time) values (ID,'1', '0',CONCAT('test', ID),CONCAT('测试',(10000000+ID)),Now(),Now(),'{\"low\":0,\"high\":0}','0', '72138514',Now(),Now());
SET ID = ID + 1;
SET Var = Var + 1;
END WHILE;
END //
delimiter ;
解释与说明:
第一个参数 init:为初始 ID 号(可自定义),第二个参数 num:为生成 MySQL 记录数量
insert 语句中自增长字段或有默认值字段在不需要改变值情况下可以不用列出
调用存储过程
文本内容:
call test_db.Insert_t_offline_activity(1,2000000); -- 插入 2 百万条数据量
注意:大数据量插入情况下,事务处理过程中可能因为连接超时限制,会报(Error Code: 2013. Lost connection to MySQL server during query)结果错误;但该情况无需理会,数据库端仍在运行存储过程事务,直到生成设定的数量才停止。