programing

MySQL 테이블을 많은 난수로 채우려면 어떻게 해야 합니까?

bestprogram 2023. 10. 9. 23:27

MySQL 테이블을 많은 난수로 채우려면 어떻게 해야 합니까?

저는 지금까지 매우 추상적인 용어로 질문해 보았지만, 구체적인 답변은 제공하지 않았습니다.

MySQL 프롬프트에서 테이블을 만들고 채우는 방법,rand_numbers, 하나의 열로,number INT, 그리고 1111 열, 여기서number열은 2222에서 5555 사이의 임의의 숫자를 보유하고 있습니까?

다음과 같은 경우:

CREATE TABLE rand_numbers(number INT);

 #run following line 1111 times
INSERT INTO rand_numbers (number) VALUES (2222 + CEIL( RAND() * 3333));

이 질문은 제기되었지만 루프를 위해 외부 언어에 의존하거나 너무 일반적입니다.일반적인 Linux MySQL 프롬프트에서 이렇게 간단한 작업을 수행할 수 있는지 알고 싶습니다.

테이블을 작성하려면 다음을 사용합니다.

CREATE TABLE rand_numbers (
    number INT NOT NULL
) ENGINE = MYISAM;

그런 다음 랜덤 값으로 채우려면 (루프를 지원하는) 저장 프로시저를 정의할 수 있습니다.

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

그런 다음 이 절차를 다시 사용하여 다른 모수를 기준으로 더 많은 랜덤 값을 삽입할 수 있습니다.1200에서 8500사이의 임의의 값을 가진 600개의 행을 말하라:

CALL InsertRand(600, 1200, 8500);

저장 프로시저를 만들지 않고 테이블 자체를 사용하여 열을 추가하는 것이 제가 적용한 한 가지 기법입니다.먼저 값으로 시드를 지정합니다.

INSERT INTO rand_numbers ( number ) VALUES ( rand() * 3333 );

그런 다음 다시 삽입합니다. 이 표에서 행을 두 배로 선택할 때마다...

INSERT INTO rand_numbers ( number ) SELECT number * rand() FROM rand_numbers; 

두 번째 쿼리를 여러 번 실행하여 꽤 많은 임의 행을 얻을 필요는 없습니다.물론 저장된 절차를 사용하는 것만큼 "정통"한 것은 아닙니다. 단지 대안을 제안하는 것 뿐입니다.

mohamed23 gharbi가 지적한 것처럼, 당신의 시험 질량이 너무 크면 당신은 복제품에 부딪힐 수 있습니다.사용가능INSERT IGNORE그것이 문제라면 중복을 건너뛰는 것입니다.

이 작업은 다음과 같은 방법으로도 수행할 수 있습니다.

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

식에 있는 FLOOR(), CHELE() 등의 수학 함수를 사용할 수도 있습니다.

나는 항상 이것을 사용했습니다.

insert into rand_numbers ( number ) select rand() from (
    select 0 as i
    union select 1 union select 2 union select 3
    union select 4 union select 5 union select 6
    union select 7 union select 8 union select 9
) as t1, (
    select 0 as i
    union select 1 union select 2 union select 3
    union select 4 union select 5 union select 6
    union select 7 union select 8 union select 9
) as t2, (
    select 0 as i
    union select 1 union select 2 union select 3
    union select 4 union select 5 union select 6
    union select 7 union select 8 union select 9
) as t3;

1000개의 난수를 삽입합니다.즉석 테이블t1,t2,t310x10x10열을 얻을 수 있습니다.

그러니까 100만 행 정도는 3개만 더 추가하면 됩니다.(select 0 as i union select 1 ...) as진술들.몇 줄씩 복사 붙여넣기를 여러 번 하는 일이 별로 없기 때문에 편리할 것 같습니다.

이게 도움이 됐으면 좋겠네요

만약 여러분이 게으르고 테이블을 만들기 위한 쿼리를 가지고 있다면, http://filldb.info/ /을 시도해보세요.

언급URL : https://stackoverflow.com/questions/11042546/how-do-i-populate-a-mysql-table-with-many-random-numbers