MySQL에서 열 값이 특정 하위 문자열로 끝나는 행을 찾아 새로운 값으로 업데이트하려면 LIKE 연산자를 사용하면 됩니다. LIKE 연산자와 와일드카드 문자(%)를 조합하면 특정 패턴으로 끝나는 값을 손쉽게 검색할 수 있습니다.
기본 문법
특정 문자열로 끝나는 행을 찾아 업데이트하는 기본 문법은 다음과 같습니다:
UPDATE yourTableName SET yourColumnName='yourValue' WHERE yourColumnName LIKE '%.yourString';
여기서 %는 임의의 문자열을 의미하는 와일드카드입니다. 따라서 '%.docx'처럼 작성하면 확장자가 .docx로 끝나는 모든 값을 찾을 수 있습니다.
예제 테이블 생성
실습을 위해 먼저 테이블을 생성해 보겠습니다. 다음 쿼리로 파일 이름을 저장할 테이블을 만듭니다:
mysql> create table RowEndsWithSpecificString -> ( -> Id int NOT NULL AUTO_INCREMENT, -> FileName varchar(30), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.50 sec)
샘플 데이터 삽입
INSERT 명령어를 사용하여 몇 개의 레코드를 삽입합니다:
mysql> insert into RowEndsWithSpecificString(FileName) values('MergeSort.c');
Query OK, 1 row affected (0.11 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('BubbleSortIntroduction.pdf');
Query OK, 1 row affected (0.25 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('AllMySQLQuery.docx');
Query OK, 1 row affected (0.18 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('JavaCollections.pdf');
Query OK, 1 row affected (0.16 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('JavaServlet.pdf');
Query OK, 1 row affected (0.18 sec)전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다:
mysql> select *from RowEndsWithSpecificString;
실행 결과는 다음과 같습니다:
+----+----------------------------+ | Id | FileName | +----+----------------------------+ | 1 | MergeSort.c | | 2 | BubbleSortIntroduction.pdf | | 3 | AllMySQLQuery.docx | | 4 | JavaCollections.pdf | | 5 | JavaServlet.pdf | +----+----------------------------+ 5 rows in set (0.00 sec)
LIKE 연산자로 조건부 업데이트 실행
이제 열 값이 특정 하위 문자열로 끝나는 행을 찾아 업데이트하는 쿼리를 살펴보겠습니다. 아래 쿼리는 '.docx'로 끝나는 값을 찾아 새로운 값인 'IntroductionToCoreJava.pdf'로 변경합니다:
mysql> update RowEndsWithSpecificString -> set FileName='IntroductionToCoreJava.pdf' -> where FileName LIKE '%.docx'; Query OK, 1 row affected (0.14 sec) Rows matched: 1 Changed: 1 Warnings: 0
실행 결과를 보면 1개의 행이 일치하고 1개의 행이 변경되었음을 알 수 있습니다.
업데이트 결과 확인
변경이 정상적으로 적용되었는지 다시 한번 테이블을 조회합니다:
mysql> select *from RowEndsWithSpecificString;
최종 결과는 다음과 같습니다:
+----+----------------------------+ | Id | FileName | +----+----------------------------+ | 1 | MergeSort.c | | 2 | BubbleSortIntroduction.pdf | | 3 | IntroductionToCoreJava.pdf | | 4 | JavaCollections.pdf | | 5 | JavaServlet.pdf | +----+----------------------------+ 5 rows in set (0.00 sec)
Id가 3인 행의 FileName이 기존의 'AllMySQLQuery.docx'에서 'IntroductionToCoreJava.pdf'로 성공적으로 변경된 것을 확인할 수 있습니다.
참고 사항
LIKE 연산자에서 와일드카드 위치에 따라 검색 방식이 달라집니다. '%.docx'는 .docx로 끝나는 값을 찾고, '.docx%'는 .docx로 시작하는 값을, '%.docx%'는 중간에 포함된 값을 찾습니다. 또한 대량의 데이터를 다룰 때는 LIKE 연산자가 인덱스를 제대로 활용하지 못할 수 있으므로 성능에 유의해야 합니다.