Directorio de artículos
prefacio
Durante el proceso de desarrollo, a menudo necesitamos algunos datos de prueba, ya sea para probar el rendimiento o para hacer que la página se vea mejor en el entorno de producción, o para aprender a verificar un determinado punto de conocimiento. En este momento, si escribe a mano, diez líneas o veinte líneas está bien. Si hay demasiadas, estará muerto. A continuación, presentaremos dos métodos de generación de lotes de datos de prueba de MySQL comúnmente utilizados
- Método de almacenamiento + función
- Generación de datos Navicat
1. Mesa
preparo dos mesas
-
Tabla de roles:
- id: auto-crecimiento
- role_name: cadena aleatoria, no se permite la repetición
- pedidos: 1-1000 cualquier número
-
tabla de usuarios:
- id: auto-crecimiento
- nombre de usuario: cadena aleatoria, no se permite la repetición
- contraseña: cadena aleatoria, se permiten repeticiones
- role_id: cualquier número entre 1-10w
-
Crear declaración de tabla:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL COMMENT '用户名',
`role_id` int(11) DEFAULT NULL COMMENT '角色id',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`salt` varchar(255) DEFAULT NULL COMMENT '盐',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`role_name` varchar(255) DEFAULT NULL COMMENT '角色名',
`orders` int(11) DEFAULT NULL COMMENT '排序权重\r\n',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
En segundo lugar, utilice la función para generar
Inserte rápidamente a través de procedimientos almacenados y asegúrese de que los datos no se repitan a través de funciones
La configuración permite crear funciones
Comprobar si MySQL permite la creación de funciones
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
El resultado se muestra en la figura, usamos el siguiente comando para habilitar la función de creación (global-todas las sesiones surten efecto)
SET GLOBAL log_bin_trust_function_creators=1;
En este momento, otra consulta mostrará que se ha abierto.
generar cadena aleatoria
-- 随机产生字符串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
DECLARE return_str VARCHAR(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
SET i = i + 1;
END WHILE;
RETURN return_str;
END $$
-- 假如要删除
-- drop function rand_string;
generar números aleatorios
-- 用于随机产生区间数字
DELIMITER $$
CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)
BEGIN
DECLARE i INT DEFAULT 0;
SET i = FLOOR(from_num +RAND()*(to_num -from_num+1));
RETURN i;
END$$
-- 假如要删除
-- drop function rand_num;
3. Crear un procedimiento almacenado
insertar tabla de roles
-- 插入角色数据
DELIMITER $$
CREATE PROCEDURE insert_role(max_num INT)
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET i = i + 1;
INSERT INTO role ( role_name,orders ) VALUES (rand_string(8),rand_num(1,5000));
UNTIL i = max_num
END REPEAT;
COMMIT;
END$$
-- 删除
-- DELIMITER ;
-- drop PROCEDURE insert_role;
insertar tabla de usuario
-- 插入用户数据
DELIMITER $$
CREATE PROCEDURE insert_user(START INT, max_num INT)
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET i = i + 1;
INSERT INTO user (username, role_id, password, salt ) VALUES (rand_string(8) ,rand_num(1,100000), rand_string(10), rand_string(10));
UNTIL i = max_num
END REPEAT;
COMMIT;
END$$
-- 删除
-- DELIMITER ;
-- drop PROCEDURE insert_user;
Cuarto, ejecute el procedimiento almacenado
-- 执行存储过程,往dept表添加10万条数据
CALL insert_role(100000);
-- 执行存储过程,往emp表添加100万条数据,编号从100000开始
CALL insert_user(100000,1100000);
resumen
Tomó casi medio minuto ejecutar 100 000 datos y más de 20 minutos para 1 000 000 de datos. Al mismo tiempo, el almacenamiento del usuario aún estaba atascado durante mucho tiempo... Al final, se agregaron con éxito, pero el
auto -el valor de incremento y el número de filas eran inconsistentes. No sé por qué...
Visualización de datos
- tabla de roles
- tabla de usuario
5. Usa la generación de datos que viene con Navicat
A continuación usamos la generación de datos de Navicat
Vaya directamente al siguiente paso y luego seleccione las dos tablas correspondientes para generar el número de filas y las reglas de generación correspondientes. Basado en la velocidad de ejecución anterior, esta vez el rol genera 10,000 datos y el usuario genera 10,000 datos. Para
cadena escriba campos, podemos configurar su generador de datos aleatorios, seleccione según sea necesario
Por ejemplo, el nombre del rol, si selecciona el título del trabajo, también puede elegir si incluir nulo, etc.
Pero si es un nombre, te permitirá elegir si es único.
Las palabras numéricas le permitirán elegir rangos, valores predeterminados, etc.
Una vez confirmado, podemos hacer clic en la esquina inferior derecha para generar datos de prueba aleatorios
De los resultados, se puede ver que toma 11 segundos generar 110,000 datos de prueba, que es mucho más rápido que el primer método.