una tienda prueba poblar llenar hechas generacion ejemplos descargar datos con como banco automaticamente aleatorios mysql database

mysql - tienda - poblar base de datos automaticamente



Rellene las tablas de la base de datos con una gran cantidad de datos de prueba (4)

Aquí está la solución con matemáticas puras y sql:

create table t1(x int primary key auto_increment); insert into t1 () values (),(),(); mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 1265 rows affected (0.01 sec) Records: 1265 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 2530 rows affected (0.02 sec) Records: 2530 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 5060 rows affected (0.03 sec) Records: 5060 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 10120 rows affected (0.05 sec) Records: 10120 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 20240 rows affected (0.12 sec) Records: 20240 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 40480 rows affected (0.17 sec) Records: 40480 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 80960 rows affected (0.31 sec) Records: 80960 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 161920 rows affected (0.57 sec) Records: 161920 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 323840 rows affected (1.13 sec) Records: 323840 Duplicates: 0 Warnings: 0 mysql> insert into t1 (x) select x + (select count(*) from t1) from t1; Query OK, 647680 rows affected (2.33 sec) Records: 647680 Duplicates: 0 Warnings: 0

Necesito cargar una tabla con una gran cantidad de datos de prueba. Esto se debe utilizar para probar el rendimiento y la escala.

¿Cómo puedo crear fácilmente 100.000 filas de datos aleatorios / no deseados para mi tabla de base de datos?


Para la clonación de varias filas (duplicación de datos) podría usar

DELIMITER $$ CREATE PROCEDURE insert_test_data() BEGIN DECLARE i INT DEFAULT 1; WHILE i < 100000 DO INSERT INTO `table` (`user_id`, `page_id`, `name`, `description`, `created`) SELECT `user_id`, `page_id`, `name`, `description`, `created` FROM `table` WHERE id = 1; SET i = i + 1; END WHILE; END$$ DELIMITER ; CALL insert_test_data(); DROP PROCEDURE insert_test_data;


Si desea más control sobre los datos, intente algo como esto (en PHP):

<?php $conn = mysql_connect(...); $num = 100000; $sql = ''INSERT INTO `table` (`col1`, `col2`, ...) VALUES ''; for ($i = 0; $i < $num; $i++) { mysql_query($sql . generate_test_values($i)); } ?>

donde la función generate_test_values ​​devolvería una cadena formateada como "(''val1'', ''val2'', ...)". Si esto lleva mucho tiempo, puede agruparlos para que no haga tantas llamadas a la base de datos, por ejemplo:

for ($i = 0; $i < $num; $i += 10) { $values = array(); for ($j = 0; $j < 10; $j++) { $values[] = generate_test_data($i + $j); } mysql_query($sql . join(", ", $values)); }

solo ejecutaría 10000 consultas, cada una agregando 10 filas.


También podría utilizar un procedimiento almacenado . Considere la siguiente tabla como ejemplo:

CREATE TABLE your_table (id int NOT NULL PRIMARY KEY AUTO_INCREMENT, val int);

Entonces podrías agregar un procedimiento almacenado como este:

DELIMITER $$ CREATE PROCEDURE prepare_data() BEGIN DECLARE i INT DEFAULT 100; WHILE i < 100000 DO INSERT INTO your_table (val) VALUES (i); SET i = i + 1; END WHILE; END$$ DELIMITER ;

Cuando lo llames, tendrás 100k registros:

CALL prepare_data();