Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 기존 필드에 30~300 사이의 난수를 추가하는 방법

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()는 실행할 때마다 다른 값을 반환하므로, 동일한 쿼리를 실행해도 결과값은 매번 달라집니다.