MySQL을 사용하다 보면 두 컬럼의 값을 서로 맞바꿔야 하는 경우가 종종 발생합니다. 예를 들어 실수로 데이터를 반대로 입력했거나, 두 필드의 값을 일괄적으로 교환해야 할 때 유용한 방법입니다. 이 글에서는 UPDATE 문과 사용자 변수(@temporaryVariable)를 활용해 특정 행의 필드 값을 간단히 교환하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number1 int,
Number2 int
);
Query OK, 0 rows affected (0.68 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(Number1,Number2) values(10,30); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable(Number1,Number2) values(60,50); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(Number1,Number2) values(110,100); Query OK, 1 row affected (0.10 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 30 | | 2 | 60 | 50 | | 3 | 110 | 100 | +----+---------+---------+ 3 rows in set (0.00 sec)
4. UPDATE 문으로 필드 값 교환하기
이제 MySQL에서 특정 필드 값을 서로 바꿔보겠습니다. 여기서는 Id=2인 행의 "Number1"과 "Number2" 필드 값을 교환합니다.
mysql> update DemoTable
set Number1=(@temporaryVariable:=Number1),
Number1=Number2,
Number2=@temporaryVariable
where Id=2;
Query OK, 1 row affected (0.21 sec)
Rows matched: 1 Changed: 1 Warnings: 0핵심 원리는 다음과 같습니다.
- @temporaryVariable: 사용자 정의 변수로, 먼저 Number1의 기존 값을 임시 저장합니다.
- Number1=Number2: Number1에 Number2의 값을 대입합니다.
- Number2=@temporaryVariable: 임시 저장해 둔 원래 Number1의 값을 Number2에 대입합니다.
이렇게 하면 별도의 임시 테이블 없이 한 번의 UPDATE 문으로 두 필드의 값을 안전하게 교환할 수 있습니다.
5. 결과 확인하기
테이블의 레코드를 다시 한번 조회해 변경 사항을 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 30 | | 2 | 50 | 60 | | 3 | 110 | 100 | +----+---------+---------+ 3 rows in set (0.00 sec)
위 출력 결과를 보면 Id=2인 행의 Number1과 Number2 값이 각각 60→50, 50→60으로 성공적으로 교환된 것을 확인할 수 있습니다.
마무리
MySQL에서 두 필드의 값을 교환할 때는 사용자 변수를 활용한 UPDATE 문이 가장 간단하고 효율적인 방법입니다. WHERE 조건을 적절히 사용하면 특정 행만 선택적으로 교환할 수 있으며, 이 기법은 데이터 수정 작업에서 매우 자주 활용되므로 꼭 익혀두시기 바랍니다.