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 문으로 먼저 영향받을 행을 확인한 후 작업하는 것이 좋습니다.