MySQL에서 빈 행(blank row)이나 NULL 값을 가진 행을 삭제하려면 DELETE 명령어를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 공백 문자열('')과 NULL 값이 저장된 행을 한 번에 제거하는 방법을 단계별로 살펴보겠습니다.
기본 문법
빈 행과 NULL 행을 함께 삭제하는 기본 문법은 다음과 같습니다.
DELETE FROM yourTableName WHERE yourColumnName = '' OR yourColumnName IS NULL;
위 조건은 컬럼 값이 빈 문자열('')인 경우와 NULL인 경우 모두를 포함하여 삭제합니다. MySQL에서는 빈 문자열과 NULL이 서로 다른 값으로 취급되기 때문에, 두 조건을 OR로 연결해야 완전하게 처리할 수 있습니다.
예제 테이블 생성
개념을 이해하기 위해 먼저 테스트용 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> CREATE TABLE deleteRowDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (0.57 sec)Id는 자동 증가(AUTO_INCREMENT)되는 기본 키이며, StudentName에는 학생 이름이 저장됩니다.
테스트 데이터 삽입
INSERT 명령어를 사용해 일부 레코드를 삽입합니다. 의도적으로 빈 문자열과 NULL 값도 함께 넣었습니다.
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('John');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES(NULL);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO deleteRowDemo(StudentName) VALUES('David');
Query OK, 1 row affected (0.35 sec)현재 데이터 확인
SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM deleteRowDemo;
실행 결과는 다음과 같습니다.
+----+-------------+ | Id | StudentName | +----+-------------+ | 1 | John | | 2 | | | 3 | | | 4 | NULL | | 5 | Carol | | 6 | Bob | | 7 | | | 8 | David | +----+-------------+ 8 rows in set (0.00 sec)
출력 결과를 보면 Id가 2, 3, 7인 행은 빈 문자열('')이고, Id가 4인 행은 NULL 값이 저장되어 있는 것을 확인할 수 있습니다.
빈 행 및 NULL 행 삭제 실행
이제 빈 문자열 행과 NULL 행을 모두 삭제하는 쿼리를 실행합니다.
mysql> DELETE FROM deleteRowDemo WHERE StudentName='' OR StudentName IS NULL; Query OK, 4 rows affected (0.18 sec)
총 4개의 행이 성공적으로 삭제되었습니다.
삭제 후 결과 확인
다시 SELECT 문으로 테이블을 조회하여 결과를 확인해 보겠습니다.
mysql> SELECT * FROM deleteRowDemo;
실행 결과는 다음과 같습니다.
+----+-------------+ | Id | StudentName | +----+-------------+ | 1 | John | | 5 | Carol | | 6 | Bob | | 8 | David | +----+-------------+ 4 rows in set (0.00 sec)
빈 문자열과 NULL 값을 가진 행들이 모두 제거되고, 유효한 이름이 있는 행만 남아있는 것을 확인할 수 있습니다.
정리
MySQL에서 빈 행을 삭제할 때 핵심은 = ''(빈 문자열 조건)와 IS NULL(NULL 조건)을 OR 연산자로 함께 사용하는 것입니다. 두 조건 중 하나만 사용하면 나머지 유형의 빈 데이터가 그대로 남게 되므로 주의해야 합니다.