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

MySQL에서 UPDATE 문으로 값 증분(Increment) 처리하는 방법

MySQL에서 기존 값을 점진적으로 증가시키며 업데이트하려면 SET 명령을 이용해 사용자 변수를 먼저 생성해야 합니다. 변수를 만드는 기본 문법은 다음과 같습니다.

set @anyVariableName := 0;

1. 테이블 생성하기

값을 업데이트하려면 UPDATE 명령을 사용합니다. 실습을 위해 먼저 테이블을 생성해 보겠습니다.

mysql> create table UpdateValueIncrementally
   -> (
   -> ProductId int
   -> );
Query OK, 0 rows affected (0.90 sec)

위 쿼리는 ProductId라는 정수형(int) 컬럼 하나만 가진 간단한 테이블을 만듭니다.

2. 레코드 삽입하기

INSERT 문을 사용해 테이블에 샘플 데이터를 입력합니다.

mysql> insert into UpdateValueIncrementally values(10);
Query OK, 1 row affected (0.15 sec)

mysql> insert into UpdateValueIncrementally values(100);
Query OK, 1 row affected (0.16 sec)

mysql> insert into UpdateValueIncrementally values(1000);
Query OK, 1 row affected (0.09 sec)

mysql> insert into UpdateValueIncrementally values(110);
Query OK, 1 row affected (0.17 sec)

mysql> insert into UpdateValueIncrementally values(102);
Query OK, 1 row affected (0.11 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from UpdateValueIncrementally;

실행 결과는 다음과 같습니다.

+-----------+
| ProductId |
+-----------+
|        10 |
|       100 |
|      1000 |
|       110 |
|       102 |
+-----------+
5 rows in set (0.00 sec)

4. 변수 초기화 후 증분 업데이트 실행하기

값을 증분 방식으로 업데이트하려면 먼저 증가 기준값이 될 변수를 설정합니다.

mysql> set @incrementValue := 33333;
Query OK, 0 rows affected (0.00 sec)

위 쿼리에서 @incrementValue 변수를 생성하고 초기값으로 33333을 할당했습니다. 이제 이 변수를 활용해 모든 행의 값을 순차적으로 증가시키는 UPDATE 문을 실행합니다.

mysql> update UpdateValueIncrementally set ProductId = (select @incrementValue := @incrementValue + @incrementValue);
Query OK, 5 rows affected (0.21 sec)
Rows matched: 5 Changed: 5 Warnings: 0

여기서 핵심은 @incrementValue := @incrementValue + @incrementValue 부분입니다. 각 행이 업데이트될 때마다 변수에 자기 자신의 현재 값을 더하게 되므로, 값이 배수 형태로 계속 누적 증가합니다. 즉, 첫 번째 행은 66666, 두 번째 행은 그 값의 두 배인 133332가 되는 방식입니다.

참고: 만약 일정한 고정값씩 더하고 싶다면 @incrementValue := @incrementValue + 33333처럼 상수를 더하는 형태로 변경하면 됩니다.

5. 업데이트 결과 확인하기

값이 정상적으로 업데이트되었는지 다시 SELECT 문으로 확인해 보겠습니다.

mysql> select *from UpdateValueIncrementally ;

실행 결과는 다음과 같습니다.

+-----------+
| ProductId |
+-----------+
|     66666 |
|    133332 |
|    266664 |
|    533328 |
|   1066656 |
+-----------+
5 rows in set (0.00 sec)

출력 결과를 보면 각 행의 값이 이전 값의 두 배씩 증가한 것을 확인할 수 있습니다. 이처럼 MySQL에서는 사용자 정의 변수와 := 연산자를 조합하여 UPDATE 문 안에서 증분 로직을 손쉽게 구현할 수 있습니다.