MySQL에서는 사용자 변수(user variable)를 활용하면 한 테이블에 저장된 값을 읽어와 다른 테이블의 특정 필드에 더하는 업데이트 작업을 손쉽게 처리할 수 있습니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable1 ( value int ); Query OK, 0 rows affected (0.59 sec)
insert 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable1 values(10); Query OK, 1 row affected (0.17 sec)
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable1;
출력 결과
+-------+ | value | +-------+ | 10 | +-------+ 1 row in set (0.00 sec)
2. 두 번째 테이블 생성
다음은 두 번째 테이블을 생성하는 쿼리입니다.
mysql> create table DemoTable2 ( value1 int ); Query OK, 0 rows affected (0.62 sec)
두 개의 레코드를 삽입합니다.
mysql> insert into DemoTable2 values(50); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable2 values(100); Query OK, 1 row affected (0.13 sec)
select 문으로 저장된 데이터를 확인합니다.
mysql> select *from DemoTable2;
출력 결과
+--------+ | value1 | +--------+ | 50 | | 100 | +--------+ 2 rows in set (0.00 sec)
3. 첫 번째 테이블의 값을 더해 필드 업데이트하기
핵심은 두 단계로 진행됩니다. 먼저 SET 구문으로 첫 번째 테이블의 값을 사용자 변수에 담고, 이 변수를 활용해 두 번째 테이블을 업데이트합니다.
mysql> set @myValue=(select value from DemoTable1); Query OK, 0 rows affected (0.00 sec) mysql> update DemoTable2 set value1=value1+@myValue; Query OK, 2 rows affected (0.11 sec) Rows matched: 2 Changed: 2 Warnings: 0
@myValue에는 DemoTable1의 값인 10이 저장되며, UPDATE 문이 실행되면 DemoTable2의 모든 행에 대해 기존 value1 값에 10씩 더해집니다. 참고로 WHERE 절이 없으므로 테이블의 전체 행이 대상이 됩니다.
4. 업데이트 결과 확인
테이블의 레코드를 다시 조회해 변경 사항을 확인합니다.
mysql> select *from DemoTable2;
출력 결과
+--------+ | value1 | +--------+ | 60 | | 110 | +--------+ 2 rows in set (0.00 sec)
결과를 보면 50은 60으로, 100은 110으로 변경된 것을 알 수 있습니다. 즉, 첫 번째 테이블의 값(10)이 두 번째 테이블의 모든 행에 성공적으로 더해졌습니다.
마무리 정리
이처럼 SET @변수명 = (SELECT ...) 형태로 서브쿼리 결과를 변수에 저장한 뒤, UPDATE 문에서 해당 변수를 사용하면 테이블 간 값을 참조한 일괄 업데이트가 가능합니다. 만약 특정 조건의 행만 업데이트하고 싶다면 WHERE 절을 함께 사용하면 됩니다.