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

MySQL에서 열 값이 특정 문자열로 끝나는 행을 찾아 업데이트하는 방법

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 연산자가 인덱스를 제대로 활용하지 못할 수 있으므로 성능에 유의해야 합니다.