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
,t3
10x10x10열을 얻을 수 있습니다.
그러니까 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
'programing' 카테고리의 다른 글
활성 ASP를 모두 나열합니다.NET 세션 (0) | 2023.10.09 |
---|---|
getActivity()는 Fragment 함수에서 null을 반환합니다. (0) | 2023.10.09 |
open_files_limit Centos 7 + MariaDB 10.2 - 상한 65536 (0) | 2023.10.09 |
ng급 지시를 받아 활기찬 (0) | 2023.10.09 |
파라미터로 외부 프로그램을 호출하는 방법은? (0) | 2023.10.09 |