MySQL에서 동일한 값을 가진 대체 행(alternate row)의 문자열만 골라 일괄 수정해야 하는 경우가 종종 있습니다. 이럴 때 MOD 연산자(%)와 REPLACE() 함수를 함께 사용하면 짝수 번째 행처럼 특정 조건에 맞는 레코드만 선택적으로 업데이트할 수 있습니다. 지금부터 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject varchar(100)
-> );
Query OK, 0 rows affected (0.76 sec)
자동 증가(AUTO_INCREMENT)되는 Id 컬럼과 과목명을 저장하는 Subject 컬럼으로 구성된 간단한 테이블입니다.
2. 샘플 데이터 삽입하기
insert 명령을 사용해 테이블에 레코드를 삽입합니다. 이때 'MongoDB' 값을 의도적으로 여러 번 반복해서 입력합니다.
mysql> insert into DemoTable(Subject) values('C');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Subject) values('Python');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.16 sec)3. 현재 데이터 확인하기
select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MongoDB |
| 3 | Java |
| 4 | MongoDB |
| 5 | Python |
| 6 | MongoDB |
+----+---------+
6 rows in set (0.00 sec)
'MongoDB'가 Id 2, 4, 6번째 행, 즉 짝수 번째 행에 위치해 있는 것을 확인할 수 있습니다.
4. 대체 행 업데이트 쿼리 실행하기
다음은 짝수 번째 행에 해당하는 레코드 중 'MongoDB' 값을 'MySQL'로 변경하는 쿼리입니다.
mysql> update DemoTable set Subject=replace(Subject,'MongoDB','MySQL') where Id%2=0;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3 Changed: 3 Warnings: 0
where Id%2=0 조건은 Id가 2로 나누어떨어지는 행, 즉 짝수 번째 행만 필터링합니다. 이 조건과 REPLACE() 함수를 결합하면 해당 행에 포함된 'MongoDB' 문자열만 'MySQL'로 변경됩니다.
5. 업데이트 결과 확인하기
변경 후 테이블의 전체 레코드를 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MySQL |
| 3 | Java |
| 4 | MySQL |
| 5 | Python |
| 6 | MySQL |
+----+---------+
6 rows in set (0.00 sec)
짝수 번째 행의 'MongoDB'가 모두 'MySQL'로 성공적으로 변경되었고, 홀수 번째 행(C, Java, Python)은 그대로 유지된 것을 확인할 수 있습니다.
정리
이처럼 WHERE Id % 2 = 0과 같은 MOD 조건에 REPLACE() 함수를 조합하면, 동일한 값을 가진 대체 행만 손쉽게 선택하여 업데이트할 수 있습니다. 반대로 홀수 번째 행을 대상으로 하고 싶다면 Id % 2 = 1 조건을 사용하면 됩니다.