MySQL에서 두 개 이상의 테이블에 저장된 데이터를 조건에 맞게 삭제해야 하는 경우가 자주 발생합니다. 이때 DELETE 명령어를 활용하면 각 테이블에서 원하는 레코드를 손쉽게 제거할 수 있습니다. 이번 글에서는 실제 예제를 통해 MySQL에서 다중 테이블 삭제를 수행하는 방법을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성하기
먼저 예제로 사용할 첫 번째 테이블을 생성합니다.
mysql> create table DemoTable1
(
Id int,
Name varchar(20)
);
Query OK, 0 rows affected (0.63 sec)2. 첫 번째 테이블에 레코드 삽입하기
INSERT 명령어를 사용하여 테이블에 샘플 데이터를 추가합니다.
mysql> insert into DemoTable1 values(1,'Chris'); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable1 values(2,'David'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1 values(3,'Bob'); Query OK, 1 row affected (0.20 sec)
3. 첫 번째 테이블 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 1 | Chris | | 2 | David | | 3 | Bob | +------+-------+ 3 rows in set (0.00 sec)
4. 두 번째 테이블 생성하기
이번에는 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2
(
ClientId int,
ClientName varchar(20)
);
Query OK, 0 rows affected (1.19 sec)5. 두 번째 테이블에 레코드 삽입하기
마찬가지로 INSERT 명령어로 샘플 데이터를 입력합니다.
mysql> insert into DemoTable2 values(101,'Mike'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable2 values(110,'Bob'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable2 values(120,'Adam'); Query OK, 1 row affected (0.60 sec)
6. 두 번째 테이블 레코드 확인하기
SELECT 문으로 두 번째 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 101 | Mike | | 110 | Bob | | 120 | Adam | +----------+------------+ 3 rows in set (0.00 sec)
7. 다중 테이블 삭제 쿼리 실행하기
이제 두 테이블에서 이름이 'Bob'인 레코드를 각각 삭제하는 DELETE 쿼리를 실행합니다.
mysql> delete from DemoTable1 where Name='Bob'; Query OK, 1 row affected (0.23 sec) mysql> delete from DemoTable2 where ClientName='Bob'; Query OK, 1 row affected (0.27 sec)
8. 삭제 결과 확인하기
먼저 첫 번째 테이블의 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable1;
'Bob' 레코드가 정상적으로 삭제된 것을 확인할 수 있습니다.
+------+-------+ | Id | Name | +------+-------+ | 1 | Chris | | 2 | David | +------+-------+ 2 rows in set (0.00 sec)
다음으로 두 번째 테이블의 레코드도 확인합니다.
mysql> select *from DemoTable2;
여기서도 'Bob' 레코드가 성공적으로 제거되었습니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 101 | Mike | | 120 | Adam | +----------+------------+ 2 rows in set (0.00 sec)
참고: JOIN을 활용한 단일 문 다중 테이블 삭제
위 예제에서는 테이블별로 DELETE 문을 개별 실행했지만, MySQL에서는 JOIN 조건을 활용해 하나의 DELETE 문으로 여러 테이블의 레코드를 동시에 삭제할 수도 있습니다. 기본 문법은 다음과 같습니다.
DELETE t1, t2 FROM DemoTable1 t1 JOIN DemoTable2 t2 ON t1.Name = t2.ClientName WHERE t1.Name = 'Bob';
이 방식은 두 테이블 간에 연관 관계(예: 동일한 이름 또는 외래 키)가 있을 때 특히 유용하며, 하나의 트랜잭션 안에서 일관성 있게 삭제 작업을 처리할 수 있다는 장점이 있습니다.
마무리
지금까지 MySQL에서 DELETE 명령어를 사용하여 여러 테이블의 데이터를 삭제하는 방법을 알아보았습니다. WHERE 절로 삭제 조건을 명확히 지정하는 것이 중요하며, 대량의 데이터를 다룰 때는 삭제 전 SELECT 문으로 대상 레코드를 먼저 확인하는 습관을 들이면 실수를 예방할 수 있습니다.