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

MySQL REPLACE() 함수로 중복 레코드를 새 값으로 교체하는 방법

MySQL에서 특정 값의 모든 레코드를 새 이름으로 교체하기

MySQL에서는 UPDATE 문과 REPLACE() 함수를 함께 사용하면 특정 문자열이 포함된 레코드를 한 번에 새 값으로 교체할 수 있습니다. 예를 들어 테이블에 'Chris'라는 이름이 여러 번 중복되어 저장되어 있을 때, 이를 'Adam Smith'로 일괄 변경하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(50)
);
Query OK, 0 rows affected (0.62 sec)

2단계: 샘플 데이터 삽입

INSERT 명령어로 몇 개의 레코드를 추가합니다. 이때 의도적으로 'Chris'라는 이름을 두 번 삽입해 중복 상황을 만듭니다.

mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name) values('Mike');
Query OK, 1 row affected (0.13 sec)

3단계: 현재 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+--------+
| Id | Name   |
+----+--------+
|  1 | Chris  |
|  2 | Robert |
|  3 | Chris  |
|  4 | David  |
|  5 | Mike   |
+----+--------+
5 rows in set (0.00 sec)

4단계: UPDATE와 REPLACE()로 중복 레코드 교체

이제 중복된 이름 'Chris'를 'Adam Smith'로 교체하는 쿼리를 실행합니다.

mysql> update DemoTable set Name=replace(Name,'Chris','Adam Smith');
Query OK, 2 rows affected (0.17 sec)
Rows matched: 5 Changed: 2 Warnings: 0

실행 결과를 보면 총 5개 행이 조회(matched)되었고, 그중 'Chris'가 포함된 2개의 행만 변경(Changed)된 것을 확인할 수 있습니다. REPLACE() 함수는 Name 컬럼 값 안에서 'Chris'라는 부분 문자열을 찾아 'Adam Smith'로 바꿉니다.

5단계: 변경 결과 검증

테이블을 다시 조회하여 변경이 정상적으로 적용되었는지 확인합니다.

mysql> select *from DemoTable;

결과는 다음과 같습니다.

+----+------------+
| Id | Name       |
+----+------------+
|  1 | Adam Smith |
|  2 | Robert     |
|  3 | Adam Smith |
|  4 | David      |
|  5 | Mike       |
+----+------------+
5 rows in set (0.00 sec)

정리 및 참고 사항

위 예제처럼 UPDATE 테이블명 SET 컬럼명=REPLACE(컬럼명,'기존값','새값') 형태의 쿼리를 사용하면 특정 문자열을 포함한 모든 레코드를 손쉽게 교체할 수 있습니다.

다만 주의할 점도 있습니다. REPLACE() 함수는 부분 문자열 단위로 치환하기 때문에, 예를 들어 'Christine'이라는 값이 있었다면 'Adam Smithine'처럼 원치 않는 결과가 나올 수 있습니다. 이런 경우에는 WHERE 절을 활용해 조건을 더 엄격하게 지정하는 것이 안전합니다.

mysql> update DemoTable set Name='Adam Smith' where Name='Chris';

또한 대량의 데이터를 다룰 때는 UPDATE 실행 전에 반드시 백업을 수행하거나, SELECT 문으로 먼저 영향받을 행을 확인한 후 작업하는 것이 좋습니다.