Saltar al contenido

¿Cómo puedo completar una tabla MySQL con muchos números aleatorios?

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 ..

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *