MySQL_Sql_打怪升级_进阶篇_测试: SQL随机生成测试数据
1.随机生成测试数据
目标:创建一张表,插入随机的行数,生成测试所需的数据。
2.测试所需环境准备
库名:userdatabase
表名:test_user_table
字段 | 需求 |
---|---|
uname | 6字符随机长度 |
ugender | 性别 M/F (M代表男,F代表女) |
utel | 随机手机号 |
ubirth | 随机出生日期(1980-2020)例如:1996-01-02 |
uage | 根据出生日期算出来 |
upassword | 12位随机密码(第一位是大写,剩下的是随机数字字母组合) |
3.使用方式
例如:插入数据100行 可以执行 call myp1_where(100);
说明:正常登录到mysql中,执行下面这段SQL语句,会生成相应的库和表还有字段名字,SQL语句可以重复执行,每次执行会清空原表内的数据,生成新的数据(默认插入100行)执行插入行数请修改括号内的数字即可。
CREATE DATABASE IF NOT EXISTS userdatabase;
USE userdatabase;
CREATE TABLE test_user_table (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(64) NOT NULL ,
ugender CHAR(1),
utel CHAR(11) NOT NULL,
ubirth DATETIME NOT NULL,
uage TINYINT NOT NULL,
upassword VARCHAR(32) NOT NULL
)ENGINE = INNODB CHARSET utf8mb4;
USE `userdatabase`;
DROP PROCEDURE IF EXISTS `test_user_table`.`myp1_where`;
TRUNCATE TABLE test_user_table;
DELIMITER $$
USE `test_user_table`$$
CREATE PROCEDURE `myp1_where`(IN num INT)
BEGIN
DECLARE str1 VARCHAR(64) DEFAULT 'abcdefghijklmnpqrstuvwxyz';
DECLARE str2 VARCHAR(10) DEFAULT 'MF';
DECLARE str3 VARCHAR(64) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE v_name,v_password,v_birth VARCHAR(64);
DECLARE v_tel CHAR(11);
DECLARE v_age TINYINT;
DECLARE v_gender CHAR(1);
DECLARE i INT DEFAULT 0;
DECLARE str,str12 VARCHAR(64);
WHILE i<num DO
SELECT SUBSTR(str1,1+FLOOR(RAND()*20),6) INTO v_name;
SELECT SUBSTR(str2,1+FLOOR(RAND()*2),1) INTO v_gender;
SELECT CONCAT('1',30+FLOOR(RAND()*70),LPAD(FLOOR(RAND()*100000000),8,'0')) INTO v_tel;
SELECT DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('1970-01-01') +FLOOR(RAND() * (UNIX_TIMESTAMP('2020-11-14') - UNIX_TIMESTAMP('1970-01-01')+ 1)))) INTO v_birth;
SELECT YEAR(NOW())-YEAR(v_birth) INTO v_age;
#select 18+floor(rand()*12) into v_age;
SELECT REPLACE(UUID(),'-','') INTO str;
SELECT SUBSTR(str,FLOOR(RAND()*21+1),12) INTO str12;
SELECT CONCAT(SUBSTR(str3,FLOOR(RAND()*26+1),1),str12) INTO v_password;
INSERT INTO test_user_table(uname,ugender,utel,ubirth,uage,upassword) VALUES(v_name,v_gender,v_tel,v_birth,v_age,v_password);
SET i=i+1;
END WHILE ;
END$$
DELIMITER ;
CALL myp1_where(100);
SELECT * FROM test_user_table;
数据如下:
mysql> SELECT * FROM test_user_table;
+-----+--------+---------+-------------+---------------------+------+---------------+
| id | uname | ugender | utel | ubirth | uage | upassword |
+-----+--------+---------+-------------+---------------------+------+---------------+
| 1 | fghijk | M | 16082530768 | 2011-04-23 00:00:00 | 9 | M11eb96e2000c |
| 2 | npqrst | F | 16898658064 | 1985-02-06 00:00:00 | 35 | T211eb96e2000 |
| 3 | bcdefg | M | 19063733992 | 2000-10-04 00:00:00 | 20 | Tb81ccc25d211 |
| 4 | hijklm | F | 14291565933 | 1971-10-23 00:00:00 | 49 | B5d211eb96e20 |
| 5 | tuvwxy | F | 19821642349 | 1977-05-17 00:00:00 | 43 | Y0b8e19725d21 |
| 6 | jklmnp | F | 16789746817 | 2014-04-22 00:00:00 | 6 | S1eb96e2000c2 |
| 7 | klmnpq | M | 17705101254 | 1981-12-02 00:00:00 | 39 | K60b99c8a25d2 |