解决随机生成值的问题后,储存过程的代码也就出来了:
------------------------------ 生成网络类型的函数----------------------------DELIMITER $$create function network() returns char(4)begindeclare networks varchar(100) default "wifi4g 3g 2g "; -- 1,5,9,13 declare idx int; declare ret char(4); set idx = 1+floor(rand()*4)*4; set ret = trim(substring(networks,idx,4)); return ret;end $$DELIMITER ;------------------------------ 生成机型的函数----------------------------DELIMITER $$create function phone_model() returns char(10)begindeclare phone_types varchar(100) default "NEX x23 x21 x20 x9 x7 x6 x5 Z1 Z2 Z3 Y97 Y91 Y85 Y83 Y81 Y79 "; declare idx int; declare ret char(10); set idx = 1+floor(rand()*17)*4; set ret = trim(substring(phone_types,idx,4)); return ret;end $$DELIMITER ;------------------------------ 生成IMEI的函数----------------------------DELIMITER $$create function randchar() returns char(5)begin declare ret char(5);set ret = substring("ABCDEFGHIJKLMNOPQRSTUVWXYZ",floor(1+26*rand()),1); return ret;end $$DELIMITER ;DELIMITER $$create function imei() returns char(50)begin declare ret char(50) default "";declare imeiLen int default 11; DECLARE idx INT default 0; WHILE idx < imeiLen DO SET idx = idx + 1; SET ret = CONCAT(ret, randchar()); END WHILE; return ret;end $$DELIMITER ;------------------------------ 创建储存过程----------------------------use test;DROP PROCEDURE IF EXISTS test.BatchInsertCustomer;delimiter //CREATE PROCEDURE BatchInsertCustomer(IN start INT,IN loop_time INT) BEGIN DECLARE Var INT; DECLARE ID INT; SET Var = 0; SET ID= start; WHILE Var < loop_time DO insert into data(`id`, `nt`, `imei`, `model`)values (ID, network(), imei(), phone_model()); SET Var = Var + 1; SET ID = ID + 1; END WHILE; END; //delimiter ;调用储存过程:
-- 调用ALTER TABLE test DISABLE KEYS;CALL BatchInsertCustomer(1, 10);ALTER TABLE test ENABLE KEYS;在测试时,使用储存过程生成1000万数据大概是140分钟,不到2个半小时 。相比逐条插入的17个小时,快了8,9倍,效率提升不少 。
3. 小结
使用 mysql 储存过程可以快速地生成 Mock 数据 。同时本文还提供了一种“如何在储存过程中基于数组来生成随机值“的思路,希望对大家有些帮助 。
3.1 参考
- MySQL批量插入大量数据方法
- MySQL函数和存储过程生成电话号码
【如何快速在mysql中生成大量Mock数据做性能测试?】
推荐阅读
- 如何才能通俗易懂的解释js里面的‘闭包’?
- 茶烟自芬芳
- 如何快速搭建日志系统
- 如何构建Google搜索自动完成功能
- 聊聊在AOP模式下的缓存方案
- 梦见家人反对我的感情 梦见家人反对我和男友在一起
- 茶乡 茶事 茶情
- 新鲜佛手柑的吃法
- 手臂变粗的原因是什么?
- 手冻伤后变粗怎么恢复