Study/DB

[MySQL] DELETE 데이터 삭제 기본 사용법

 

DELETE 구문은 테이블에서 특정 row를 삭제할 때 사용됩니다.

 

기본 구조

DELETE 문의 구조는 다음과 같습니다.

DELETE FROM [테이블명]
WHERE [조건]

 

WHERE 절을 사용하면 조건에 맞는 행만 삭제됩니다.

만약 WHERE절을 생략하면 테이블의 모든 데이터가 삭제됩니다.

 

예제

예제에 사용할 테이블과 데이터입니다.

create table tb_1 (
	id int(11) not null auto_increment primary key comment 'key',
    name varchar(255) not null comment '이름',
    address varchar(255) null default '' comment '주소'
);

insert into tb_1 (id, name, address) values (1, 'Kim', 'Seoul');
insert into tb_1 (id, name, address) values (2, 'Lee', 'Seoul');
insert into tb_1 (id, name, address) values (3, 'Park', 'Busan');
insert into tb_1 (id, name, address) values (4, 'Kim', 'Jeju');

 

단일 행 삭제

DELETE 구문으로 단일 행을 삭제하려면 key 조건을 WHERE 절에 사용하면 됩니다.

DELETE FROM tb_1 WHERE id = 4;

tb_1 테이블의 id 컬럼은 테이블의 Primary Key라서 유일한 값을 가집니다.

그래서 key를 조건에 사용하면 단일 행을 삭제할 수 있습니다.

 

다수 행 삭제

WHERE 조건에서 key 조건이 아닌 다른 컬럼으로 조건을 걸면 조건에 맞는 여러 행을 삭제할 수 있습니다.

DELETE FROM tb_1 WHERE address = 'Seoul';

조건에 맞는 행이 2개라서 2개의 행이 삭제됩니다.

 

다만, UPDATE 구문처럼 MySQL Workbench에서 key 조건이 아닌 다른 컬럼으로 DELETE 구문을 실행하면 오류가 발생합니다(UPDATE 페이지 sql_safe_updates 해제 방법 참고).

 

WHERE 절 없이 DELETE 구문을 실행하면 모든 데이터가 삭제됩니다.

실제 운영 환경에서 사용하는 데이터베이스에서 DELETE 구문을 잘못 사용하게되면 큰 문제가 발생합니다.

그래서 DELETE 구문을 사용하기 전에 데이터를 백업하고, 같은 조건으로 SELECT 구문을 실행해서 삭제할 데이터를 확인하고 진행하는 것이 좋습니다.

 

 

 

 

LIMIT 절 사용

조건에 해당하는 행이 많아서 삭제할 행 수를 제한하고자 할 때 DELETE 구문에 LIMIT 절을 추가해서 사용하면 됩니다.

DELETE FROM [테이블명]
WHERE [조건]
LIMIT [제한할 행 수]

 

예를 들어, 이렇게 데이터가 있다고 할 때

DELETE LIMIT 사용을 위한 데이터
DELETE LIMIT 사용을 위한 데이터

18개의 데이터 중 5개만 삭제하고 싶을 때 다음과 같이 쿼리를 실행하면 됩니다.

DELETE FROM tb_1 LIMIT 5;

DELETE LIMIT 사용 결과
DELETE LIMIT 사용 결과

위에서부터 5개의 행이 삭제되었습니다(id 61 ~ 915 삭제).

 

만약에 끝에서부터 데이터를 삭제하고 싶다면 ORDER BY 절을 추가하면 됩니다.

DELETE FROM tb_1 ORDER BY id desc limit 5;

DELETE ORDER BY 사용 결과
DELETE ORDER BY 사용 결과

id 내림차순으로 정렬한 후 위에서부터 5개를 삭제했습니다(id 2806 ~ 3538 삭제).