Solución:
Para crear la tabla, use:
CREATE TABLE rand_numbers (
number INT NOT NULL
) ENGINE = MYISAM;
Luego, para completarlo con valores aleatorios, puede definir un procedimiento almacenado (que admite bucles):
DELIMITER $$
CREATE PROCEDURE InsertRand(IN NumRows INT, IN MinVal INT, IN MaxVal INT)
BEGIN
DECLARE i INT;
SET i = 1;
START TRANSACTION;
WHILE i <= NumRows DO
INSERT INTO rand_numbers VALUES (MinVal + CEIL(RAND() * (MaxVal - MinVal)));
SET i = i + 1;
END WHILE;
COMMIT;
END$$
DELIMITER ;
CALL InsertRand(1111, 2222, 5555);
Luego puede reutilizar ese procedimiento para insertar más valores aleatorios basados en diferentes parámetros … digamos 600 filas con valores aleatorios entre 1200 y 8500:
CALL InsertRand(600, 1200, 8500);
Sin crear un procedimiento almacenado, una técnica que he aplicado es usar la propia tabla para agregar las columnas. Primero siembre con un valor …
INSERT INTO rand_numbers ( number ) VALUES ( rand() * 3333 );
Luego inserte nuevamente, seleccionando de esta tabla para duplicar las filas cada vez …
INSERT INTO rand_numbers ( number ) SELECT number * rand() FROM rand_numbers;
No es necesario ejecutar la segunda consulta tantas veces para obtener bastantes filas aleatorias. No es tan “ordenado” como usar un procedimiento almacenado, por supuesto, solo proponiendo una alternativa.
Como señaló mohamed23gharbi, puede encontrarse con duplicados si su masa de prueba es demasiado grande. Puedes usar INSERT IGNORE
para omitir los duplicados si eso es un problema.
La tarea también se puede realizar de esta manera:
-- scale from 0 to MAX
UPDATE `table` SET `column` = 1000 * RAND() WHERE 1;
-- scale from MIN to MAX
UPDATE `table` SET `column` = MIN + (MAX - MIN) * RAND() WHERE 1;
También puede usar funciones matemáticas como FLOOR (), CEIL (), etc.en la expresión ..