MySQL 테이블에서 특정 문자열이 포함된 행을 일괄 삭제하려면 DELETE 문과 LIKE 연산자를 함께 사용하면 됩니다. 이 글에서는 샘플 테이블 "bar"를 직접 만들어 보고, 문자열 "foo"가 포함된 모든 행을 삭제하는 전체 과정을 단계별로 살펴봅니다.
1. 샘플 테이블 생성
먼저 예제에 사용할 테이블 "bar"를 생성합니다. 아래 쿼리는 자동 증가(AUTO_INCREMENT)되는 기본키 Id 컬럼과 longtext 타입의 Words 컬럼으로 구성된 테이블을 만듭니다.
mysql> create table bar -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Words longtext, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.61 sec)
2. 테스트 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다. 이때 의도적으로 "foo"라는 문자열이 앞, 중간, 뒤에 포함된 값들을 함께 넣어 다양한 패턴을 테스트할 수 있도록 합니다.
mysql> insert into bar(Words) values('Javafoo');
Query OK, 1 row affected (0.14 sec)
mysql> insert into bar(Words) values('fooMySQL');
Query OK, 1 row affected (0.19 sec)
mysql> insert into bar(Words) values('Introductiontofoo C and C++');
Query OK, 1 row affected (0.22 sec)
mysql> insert into bar(Words) values('Introduction to Node.js');
Query OK, 1 row affected (0.19 sec)
mysql> insert into bar(Words) values('Introduction to Hibernate framework');
Query OK, 1 row affected (0.17 sec)
3. 전체 데이터 확인
SELECT 문으로 현재 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from bar;
실행 결과는 다음과 같습니다.
+----+-------------------------------------+ | Id | Words | +----+-------------------------------------+ | 1 | Javafoo | | 2 | fooMySQL | | 3 | Introductiontofoo C and C++ | | 4 | Introduction to Node.js | | 5 | Introduction to Hibernate framework | +----+-------------------------------------+ 5 rows in set (0.00 sec)
4. LIKE 연산자로 조건부 삭제 실행
이제 "foo"가 포함된 행만 골라서 삭제하는 DELETE 쿼리를 실행합니다. LIKE 패턴을 여러 개 조합하여 문자열의 어느 위치에 "foo"가 있더라도 매칭되도록 처리합니다.
mysql> delete from bar where Words like '%foo' -> or Words like '%foo%' -> or Words like 'foo%'; Query OK, 3 rows affected (0.20 sec)
참고: 실무에서는 WHERE Words LIKE '%foo%' 조건 하나만으로도 충분합니다. 와일드카드 %는 0개 이상의 임의 문자를 의미하므로, '%foo%'는 문자열의 시작, 중간, 끝 어디에 "foo"가 있든 모두 매칭합니다. 위 예제의 세 가지 조건은 각각의 LIKE 패턴을 학습하기 위해 나열한 것입니다.
5. 삭제 결과 검증
삭제 후 테이블을 다시 조회하여 결과를 확인합니다.
mysql> select *from bar;
실행 결과는 다음과 같습니다.
+----+-------------------------------------+ | Id | Words | +----+-------------------------------------+ | 4 | Introduction to Node.js | | 5 | Introduction to Hibernate framework | +----+-------------------------------------+ 2 rows in set (0.00 sec)
위 출력 결과에서 볼 수 있듯이, "foo"라는 문자열을 포함하던 3개의 행(Id 1, 2, 3)은 모두 테이블 "bar"에서 성공적으로 삭제되었고, 해당 문자열이 없던 나머지 2개의 행만 남아 있는 것을 확인할 수 있습니다.
정리
특정 문자열이 포함된 행을 삭제하는 핵심은 DELETE 문의 WHERE 절에서 LIKE 연산자를 사용하는 것입니다. 패턴 매칭 시 % 와일드카드를 적절히 활용하면 원하는 위치의 문자열까지 정확하게 필터링할 수 있습니다. 대량의 데이터를 다룰 때는 삭제 전 반드시 SELECT 문으로 대상 행을 먼저 확인한 후 DELETE를 실행하는 것이 안전합니다.