[MySQL] Varias formas de insertar datos de prueba en lotes en MySQL

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';

inserte la descripción de la imagen aquí

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; 

inserte la descripción de la imagen aquí

En este momento, otra consulta mostrará que se ha abierto.
inserte la descripción de la imagen aquí

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é...
inserte la descripción de la imagen aquí

Visualización de datos

  • tabla de roles

inserte la descripción de la imagen aquí

  • tabla de usuario

inserte la descripción de la imagen aquí

5. Usa la generación de datos que viene con Navicat

A continuación usamos la generación de datos de Navicat

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

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
inserte la descripción de la imagen aquí

Por ejemplo, el nombre del rol, si selecciona el título del trabajo, también puede elegir si incluir nulo, etc.
inserte la descripción de la imagen aquí

Pero si es un nombre, te permitirá elegir si es único.
inserte la descripción de la imagen aquí

Las palabras numéricas le permitirán elegir rangos, valores predeterminados, etc.
inserte la descripción de la imagen aquí

Una vez confirmado, podemos hacer clic en la esquina inferior derecha para generar datos de prueba aleatorios
inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/u011397981/article/details/130679281
Recomendado
Clasificación