MySQL에서 두 열 사이의 데이터를 서로 맞바꾸려면 사용자 정의 변수(user-defined variable) 개념을 활용하면 됩니다. 이 글에서는 예제 테이블을 만들고, Name1 열과 Name2 열의 값을 실제로 교환하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 두 개의 문자열 열을 가진 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Name1 varchar(100),
-> Name2 varchar(100)
-> );
Query OK, 0 rows affected (0.58 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John Smith','Chris Brown');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David Miller','Jone Doe');
Query OK, 1 row affected (0.16 sec)3. 현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+--------------+-------------+
| Name1 | Name2 |
+--------------+-------------+
| John Smith | Chris Brown |
| David Miller | Jone Doe |
+--------------+-------------+
2 rows in set (0.00 sec)
4. 두 열의 데이터 교환하기
다음은 변수를 활용해 두 열의 값을 서로 바꾸는 UPDATE 쿼리입니다.
mysql> update DemoTable
-> SET Name1=(@tmpName:=Name1), Name1 = Name2, Name2 = @tmpName;
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2 Changed: 2 Warnings: 0
이 쿼리의 동작 원리는 다음과 같습니다.
@tmpName:=Name1: Name1의 기존 값을 임시 변수@tmpName에 저장합니다.Name1 = Name2: Name1에 Name2의 값을 할당합니다.Name2 = @tmpName: 저장해 둔 원래 Name1의 값을 Name2에 할당합니다.
5. 교환 결과 확인
다시 한번 테이블을 조회하여 값이 제대로 바뀌었는지 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------------+--------------+
| Name1 | Name2 |
+-------------+--------------+
| Chris Brown | John Smith |
| Jone Doe | David Miller |
+-------------+--------------+
2 rows in set (0.00 sec)
Name1과 Name2의 값이 성공적으로 교환된 것을 확인할 수 있습니다.
참고: 더 간단한 방법
MySQL은 UPDATE 문의 SET 절을 왼쪽에서 오른쪽 순서로 평가하기 때문에, 별도의 변수 없이 아래와 같이 간단히 작성해도 두 열의 값이 교환됩니다.
mysql> update DemoTable
-> SET Name1 = Name2, Name2 = Name1;
다만 이 동작은 MySQL 고유의 특성이며, 표준 SQL을 따르는 다른 데이터베이스에서는 결과가 달라질 수 있으므로 주의가 필요합니다. 호환성을 고려한다면 앞서 소개한 변수를 사용하는 방식이 더 안전합니다.