MySQL에서는 사용자 정의 변수(User-Defined Variable)를 활용하면 UPDATE 문 실행 시 각 행마다 값을 동적으로 계산하여 순차적으로 변경할 수 있습니다. 이번 글에서는 @uId 같은 사용자 정의 변수를 선언하고, 이를 이용해 테이블의 여러 행을 한 번에 증가시키는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable2027
-> (
-> UserId int
-> );
Query OK, 0 rows affected (0.65 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable2027 values(10);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2027 values(20);
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable2027 values(31);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable2027 values(11);
Query OK, 1 row affected (0.12 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable2027;
실행 결과는 다음과 같습니다.
+--------+
| UserId |
+--------+
| 10 |
| 20 |
| 31 |
| 11 |
+--------+
4 rows in set (0.00 sec)
4. 사용자 정의 변수로 UPDATE 실행하기
먼저 SET 구문으로 사용자 정의 변수 @uId에 초기값 100을 할당합니다. 그런 다음 UPDATE 문 안에서 (@uId:=@uId+10) 표현식을 사용하면, 각 행이 처리될 때마다 변수 값이 10씩 증가하며 해당 값이 UserId 컬럼에 저장됩니다.
mysql> set @uId:=100;
Query OK, 0 rows affected (0.00 sec)
mysql> update DemoTable2027
-> set UserId=(@uId:=@uId+10);
Query OK, 4 rows affected (0.13 sec)
Rows matched: 4 Changed: 4 Warnings: 0
동작 원리
- set @uId:=100; — := 연산자를 사용해 변수 @uId에 100을 할당합니다.
- (@uId:=@uId+10) — 첫 번째 행에서는 110(=100+10), 두 번째 행에서는 120, 세 번째 행에서는 130, 네 번째 행에서는 140이 됩니다.
5. 업데이트 결과 확인하기
테이블의 레코드를 다시 조회해 결과를 확인해 보겠습니다.
mysql> select *from DemoTable2027;
실행 결과는 다음과 같습니다.
+--------+
| UserId |
+--------+
| 110 |
| 120 |
| 130 |
| 140 |
+--------+
4 rows in set (0.00 sec)
위와 같이 기존 값과 상관없이 각 행이 110부터 시작해 10씩 증가하는 값으로 성공적으로 업데이트된 것을 확인할 수 있습니다. 이처럼 사용자 정의 변수를 활용하면 복잡한 서브쿼리나 프로시저 없이도 간단하게 순차적인 값 일괄 업데이트를 처리할 수 있습니다.