MySQL 데이터베이스에서 문자열을 찾아 다른 값으로 교체하려면 replace() 함수를 사용하면 됩니다. 이 함수는 지정한 조건에 해당하는 행의 특정 문자열만 안전하게 치환해 주기 때문에, 대량의 데이터를 수정할 때 특히 유용합니다.
기본 문법
UPDATE 문과 함께 replace() 함수를 사용하는 기본 문법은 다음과 같습니다.
UPDATE yourTableName SET yourColumnName = replace(yourColumnName, 'yourExistingValue', 'yourNewValue') WHERE <yourCondition>;
- yourTableName : 수정할 테이블 이름
- yourColumnName : 값을 변경할 컬럼 이름
- yourExistingValue : 찾을(교체 대상) 문자열
- yourNewValue : 새로 바꿀 문자열
- WHERE 절 : 특정 조건에 해당하는 행만 변경하도록 제한
예제 테이블 생성하기
문법을 실제로 이해하기 위해 간단한 테이블을 만들어 보겠습니다. 아래 쿼리로 findAndReplaceDemo 테이블을 생성합니다.
mysql> create table findAndReplaceDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)샘플 데이터 삽입하기
INSERT 명령으로 학생 이름 몇 개를 입력합니다.
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Bob');
Query OK, 1 row affected (0.10 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Maxwell');
Query OK, 1 row affected (0.17 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from findAndReplaceDemo;
실행 결과는 다음과 같습니다.
+----+------------------+ | Id | StudentFirstName | +----+------------------+ | 1 | Carol | | 2 | David | | 3 | Bob | | 4 | Sam | | 5 | Mike | | 6 | Maxwell | +----+------------------+ 6 rows in set (0.00 sec)
특정 문자열만 찾아 바꾸는 UPDATE 쿼리
이제 핵심 단계입니다. WHERE 절을 활용해 'Maxwell'이라는 값에 해당하는 행만 골라서 'Chris'로 변경해 보겠습니다.
mysql> update findAndReplaceDemo -> set StudentFirstName=replace(StudentFirstName,'Maxwell','Chris') -> where StudentFirstName='Maxwell'; Query OK, 1 row affected (0.16 sec) Rows matched: 1 Changed: 1 Warnings: 0
실행 결과를 보면 1개의 행이 일치(Rows matched: 1)하고 1개의 행이 변경(Changed: 1)된 것을 확인할 수 있습니다.
변경 결과 검증하기
테이블을 다시 조회하여 'Maxwell'이 'Chris'로 정상적으로 바뀌었는지 확인해 보겠습니다.
mysql> select *from findAndReplaceDemo;
업데이트된 최종 결과는 다음과 같습니다.
+----+------------------+ | Id | StudentFirstName | +----+------------------+ | 1 | Carol | | 2 | David | | 3 | Bob | | 4 | Sam | | 5 | Mike | | 6 | Chris | +----+------------------+ 6 rows in set (0.00 sec)
마무리 및 주의사항
이처럼 UPDATE + replace() + WHERE 조합을 사용하면 원하는 특정 문자열만 정확히 찾아 바꿀 수 있습니다.
실무에서 활용할 때는 다음 사항을 꼭 기억하세요.
- WHERE 절 생략 시 주의 : WHERE 조건 없이 실행하면 해당 컬럼의 모든 행에서 문자열이 일괄 치환되므로, 의도하지 않은 대량 변경이 발생할 수 있습니다.
- 실행 전 백업 권장 : 중요한 운영 데이터라면 UPDATE 실행 전에 반드시 백업을 하거나, SELECT 문으로 먼저 대상 행을 확인하는 것이 안전합니다.
- 대소문자 구분 : replace() 함수는 기본적으로 대소문자를 구분하므로, 정확한 문자열을 지정해야 합니다.