MySQL에서 기존 필드 값에 30부터 300 사이의 임의의 숫자(난수)를 더하고 싶다면 UPDATE 문과 RAND(), FLOOR() 함수를 조합하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 데모 테이블 생성
먼저 실습에 사용할 데모 테이블을 생성합니다.
mysql> create table RandomNumberDemo
-> (
-> MyNumber int
-> );
Query OK, 0 rows affected (0.54 sec)2. 샘플 데이터 삽입
INSERT 명령어를 사용하여 테이블에 몇 개의 레코드를 넣어 보겠습니다.
mysql> insert into RandomNumberDemo values(17); Query OK, 1 row affected (0.20 sec) mysql> insert into RandomNumberDemo values(18); Query OK, 1 row affected (0.12 sec) mysql> insert into RandomNumberDemo values(29); Query OK, 1 row affected (0.49 sec)
3. 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from RandomNumberDemo;
실행 결과는 다음과 같습니다.
+----------+ | MyNumber | +----------+ | 17 | | 18 | | 29 | +----------+ 3 rows in set (0.00 sec)
4. 30~300 사이의 난수 추가하기
이제 기존 필드 값에 30에서 300 사이의 난수를 더하는 쿼리입니다. 여기서는 MyNumber가 18인 행에만 적용해 보겠습니다.
mysql> update RandomNumberDemo set MyNumber=MyNumber+ FLOOR(RAND() * (270 + 1)) + 30 where MyNumber=18; Query OK, 1 row affected (0.20 sec) Rows matched: 1 Changed: 1 Warnings: 0
쿼리 동작 원리
핵심 수식인 FLOOR(RAND() * (270 + 1)) + 30의 동작 방식은 다음과 같습니다.
RAND(): 0 이상 1 미만의 무작위 소수를 반환합니다.RAND() * 271: 결과 범위가 0 이상 271 미만이 됩니다.FLOOR(): 소수점 아래를 버려 정수로 만들므로 최종적으로 0~270 사이의 정수가 됩니다.+ 30: 전체 범위를 30만큼 이동시켜 최종적으로 30~300 사이의 정수가 생성됩니다.
즉, 일반화하면 FLOOR(RAND() * (최댓값 - 최솟값 + 1)) + 최솟값 형태로 원하는 범위의 난수를 만들 수 있습니다.
5. 결과 확인
테이블을 다시 조회하여 변경된 값을 확인해 보겠습니다.
mysql> select *from RandomNumberDemo;
실행 결과는 다음과 같습니다.
+----------+ | MyNumber | +----------+ | 17 | | 158 | | 29 | +----------+ 3 rows in set (0.00 sec)
기존 값이 18이었던 행에 140이라는 난수가 더해져 158로 변경된 것을 확인할 수 있습니다. 참고로 RAND()는 실행할 때마다 다른 값을 반환하므로, 동일한 쿼리를 실행해도 결과값은 매번 달라집니다.