데이터베이스/Oracle

Oracle - DML(Data ManipulationLanguage) DELETE - Part 3

Cuvely 2020. 11. 20. 16:29
728x90
반응형

DELETE

DELETE란 테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어든다.

삭제 시 FOREIGN KEY 제약조건으로 컬럼 삭제가 불가능한 경우 제약조건을 비활성화 할 수 있다.

 

[ DELETE 예시 ]

DELETE FROM EMPLOYEE
WHERE EMP_NAME = ‘장채현’;

 

결과는 이렇게 나온다.

 

* WHERE조건을 설정하지 않으면 모든 행이 삭제된다.

* FOREIGN KEY 제약조건이 설정되어 있는 경우 참조되고 있는 값에 대해서는 삭제불가능하다.

 

제약조건 비활성화

DELETE FROM DEPARTMENT
WHERE DEPT_ID = ‘D1’;

ALTER TABLE EMPLOYEE
DISABLE CONSTRAINT EMP_DEPTCODE_FK CASCADE; -- 비활성화 한다.

DELETE FROM DEPARTMENT
WHERE DEPT_ID = ‘D1’;

ALTER TABLE EMPLOYEE
ENABLE CONSTRAINT EMP_DEPTCODE_FK; -- 다시 활성화 할 수 있다.

* 비활성화 된 제약 조건 다시 활성화 시킬 수 있다.

 

 

 

 

TRUNCATE

TRUNCATE란 테이블 전체 행 삭제 시 사용 하는 DDLDELETE보다 수행 속도가 빠르고 ROLLBACK을 통해 복구가 불가능하다.

또한 DELETE와 마찬가지로 FOREIGN KEY 제약조건일 때는 적용 불가능하기 때문에 제약 조건을 비활성화 해야 삭제할 수 있다.

 

[ TRUNCATE 예시 ]

 

TRUNCATE TABLE EMP_SALARY;

테이블을 조회하면 결과가 이러하다.

* 모든 컬럼이 삭제되긴 하지만 테이블의 구조는 남아있다.

 

되돌리기위해 ROLLBACK을 해본다.

ROLLBACK;

하지만 ROLLBACK 후에도 컬럼이 복구되지 않는다.

728x90
반응형