MySQL에서 1~3 사이의 난수로 컬럼 값 업데이트하기
MySQL에서 특정 컬럼의 값을 1부터 3 사이의 난수로 일괄 업데이트해야 하는 경우가 종종 있습니다. 이럴 때는 RAND() 함수와 FLOOR() 함수를 조합하면 아주 간단하게 처리할 수 있습니다.
기본 구문
UPDATE yourTableName SET yourColumnName = FLOOR(1 + RAND() * 3);
RAND()는 0 이상 1 미만의 실수를 반환합니다. 여기에 3을 곱하고 1을 더한 뒤 FLOOR()로 소수점을 버리면 최종적으로 1, 2, 3 중 하나의 정수가 생성됩니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE UpdateNumber1To3
-> (
-> MyNumber INT
-> );
Query OK, 0 rows affected (0.61 sec)
샘플 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO UpdateNumber1To3 VALUES(100);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO UpdateNumber1To3 VALUES(140);
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO UpdateNumber1To3 VALUES(130);
Query OK, 1 row affected (0.15 sec)
현재 데이터 확인
SELECT 문으로 저장된 모든 레코드를 조회합니다.
mysql> SELECT * FROM UpdateNumber1To3;
실행 결과는 다음과 같습니다.
+----------+ | MyNumber | +----------+ | 100 | | 140 | | 130 | +----------+ 3 rows in set (0.00 sec)
난수로 업데이트 실행
이제 MyNumber 컬럼의 값을 1~3 사이의 난수로 업데이트해 보겠습니다.
mysql> UPDATE UpdateNumber1To3 SET MyNumber = FLOOR(1 + RAND() * 3);
Query OK, 3 rows affected (0.19 sec)
Rows matched: 3 Changed: 3 Warnings: 0
업데이트 결과 확인
다시 테이블을 조회하면 값이 변경된 것을 확인할 수 있습니다.
mysql> SELECT * FROM UpdateNumber1To3;
업데이트된 결과는 다음과 같습니다.
+----------+ | MyNumber | +----------+ | 1 | | 2 | | 1 | +----------+ 3 rows in set (0.00 sec)
동작 원리 정리
FLOOR(1 + RAND() * 3)의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
RAND(): 0 이상 1 미만의 임의의 실수 반환 (예: 0.7234)RAND() * 3: 0 이상 3 미만의 실수 (예: 2.1702)1 + RAND() * 3: 1 이상 4 미만의 실수 (예: 3.1702)FLOOR(...): 소수점 이하 버림 → 결과적으로 1, 2, 3 중 하나의 정수
이 방식은 테스트 데이터 생성, 랜덤 샘플링, 가짜(dummy) 값 채우기 등 다양한 상황에서 유용하게 활용할 수 있습니다. 원하는 범위가 달라지면 곱하는 숫자와 더하는 숫자만 조정하면 되므로 응용성도 뛰어납니다.