쿼리실습 - 데이터 삭제

imjingu·2023년 8월 17일
0

개발공부

목록 보기
386/481

1. DELETE

레코드를 삭제할 때 사용.
삭제는 항상 레코드 단위로 수행하므로 필드에 대한 지정은 없음.

기본형
DELETE FROM 테이블 WHERE 조건

INSERT는 전치사 INTO를 쓰는데 비해 DELETE는 전치사 FROM을 씀.
삭제 동작은 특정 조건에 맞는 레코드를 찾아 제거라는 경우가 대부분이어서 WHERE 절이 항상 뒤따라 옴.

DELETE FROM tCity WHERE name = '부산';

도시명이 '부산'인 레코드를 삭제.

DELETE FROM tCity WHERE region = '경기';

경기도에 있는 모든 도시를 삭제.

2. 삭제 안전 장치

삭제시 문제가 되는 부분은
1) 조건절을 빼거나
2) 잘못된 조건을 사용하는 경우
조회만 하는 SELECT 명령은 테이블을 변경하지 않아 실수해도 별 문제가 되지 않음. 조건을 바꿔 다시 조회하면 됨.
INSERT 명령은 테이블을 변경하지만 혹시라도 잘못 삽입 했으면 다시 지우면 되어서 그다지 위험하지 않음.
하지만 잘못 내린 DELETE 명령은 치명적. 명령 즉시 처리해 버림.
DELETE문은 특정 레코드를 삭제하기 위해 왠만하면 WHERE 절과 함께 사용하지만 실수로 WHERE 절을 생략해 버리면 모든 데이터가 삭제가 됨.

설사 WHERE 절이 있더라도 조건을 잘못 지정하면 엉뚱한 레코드가 삭제될 위험은 존재.
조건이 복잡하면 지울 레코드를 제대로 선정하는 것이 쉽지 않음.

만일 50만 초과인 도시를 삭제한다면 다음 절차대로 작업.
1. DELETE 명령을 내리기 전에 먼저 SELECT로 삭제 대상 레코드를 고름

SELECT * FROM tCity WHERE popu > 50;


2. 조건을 맞는지 확인 후 제거

DELETE FROM tCity WHERE popu > 50;

3. TRUNCATE

WHERE 절이 없는 DELETE 명령은 상당히 위험하지만 테이블을 비울 목적이라면 사용 가능, 하지만 이 명령은 레코드를 논리적인 방법으로 하나씩 지우고 로그도 남기지만 느림.
수십만건의 레코드를 일일이 지우게 되면 서버에도 부하가 생김, 이 경우에는 다음 명령이 효율적.
TRUNCATE TABLE 테이블
이 명령은 테이블을 완전히 비움.
물리적인 기억 장소를 깨끗이 비우고 임시 영역에 로그도 남기지 않아 훨씬 빠름.

TRUNCATE TABLE tCity;

0개의 댓글