一、背景
在软件的开发过程中,开发人员设计完数据库表之后,难免会批量生成一批测试数据,有些开发的同学会通过测试用例编写一下插入数据,这样操作比较慢。那么今天小编就来讲讲我是怎么来批生成测试数据的。
二、执行脚本
这里是批量生产1000条数据,这个也是根据自己的需要去生产对应的测试数据,注意中间的insert语句,这个就是要插入的执行SQL
-- 循环插入
drop PROCEDURE dyq_data_insert;
DELIMITER;;
CREATE PROCEDURE dyq_data_insert()
begin
declare num int;
set num = 0;
while num < 10000 do
INSERT INTO `t_table_name`(`id`, `data_type`, `name`, `id_card_type_code`, `id_card`, `gender_code`, `birth_date`) VALUES (UUID(), 'data_type', concat(elt(1 + floor(rand() * 4), '李', '王', '赵', '肖') , '*', elt(1 + floor(rand() * 36), '天', '强', '果', '秋', '好', '豪', '武', '智', '蕊', '晨', '柯','娅','崴','萁','鑫','岳','赫','森','珈','山','尚','延','延','紫','灵','山','舜','尊','楠','贤','达','美','毅','娅','轩','瑞')), 1, '440107193********0', floor(1 + RAND() * 2), date_add('2023-01-01 12:01:21', interval rand() * 150 day));
set num = num + 1;
end while;
END;;
call dyq_data_insert();
三、随机模拟数据
SELECT floor(1 + RAND() * 2);
select date_add('2023-01-01 12:01:21', interval rand() * 150 day)
SELECT concat(elt(1 + floor(rand() * 4), '李', '王', '赵', '肖') , '*', elt(1 + floor(rand() * 36), '天', '强', '果', '秋', '好', '豪', '武', '智', '蕊', '晨', '柯','娅','崴','萁','鑫','岳','赫','森','珈','山','尚','延','延','紫','灵','山','舜','尊','楠','贤','达','美','毅','娅','轩','瑞'));
四、查询数据脱敏
提供好具体的脚本,需要对身份证、姓名、电话 进行脱敏
SELECT
replace('430422199911112222', SUBSTR('430422199911112222' FROM 7 FOR 8), '********') as "身份证脱敏",
replace('张三山', SUBSTR('张三山' FROM 2 FOR 1), '*') as "姓名脱敏",
replace('13392665400', SUBSTR('13392665400' FROM 4 FOR 4), '****') as "手机号码脱敏";