Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

동일한 값을 가진 대체 행의 문자열을 업데이트하는 MySQL 쿼리 방법

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 조건을 사용하면 됩니다.