Oracle - TRUNCATE와 DELETE의 차이

Posted 08 1, 2010 12:27, Filed under: DataBase/Oracle

- TRUNCATE 라는 명령은 해당 테이블의 모든 로우들을 잘라내는 기능을 하는 DDL 명령어로서 자동 커밋이 발생합니다.

- TRUNCATE TABLE 명령어를 수행하면 테이블의 구조는 남아있지만, 해당 테이블의 모든 컬럼의 내용이 삭제됩니다.
SQL> SELECT * FROM EMP_05;

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7654       7698 28-SEP-81          1250       1400         30
      7566       7839 02-APR-81          2975                    20
      7844       7698 08-SEP-98          1500          0         30
      7902       7566 03-NOV-81          3000                    20
      7368       7902 17-NOV-80           800                    20
      7839            17-NOV-81          5000                    40
      7521       7698 22-FEB-81          1250        500         30
      7698       7839 01-MAY-81          2850                    30
      7782       7839 09-JUN-81          2450                    10
      7934       7782 23-JAN-82          1300                    10
      7499       7698 20-FEB-81          1600        300         30

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7788       7566 09-NOV-82          3000                    20
      7900       7698 03-NOV-81          1957                    30
      7369       7902 17-NOV-80           800                    20
      7876       7788 12-JAN-83          1100                    20

15 rows selected.

SQL> TRUNCATE TABLE EMP_05;

Table truncated.

SQL> SELECT * FROM EMP_05;

no rows selected

SQL> ROLLBACK;

Rollback complete.

SQL> SELECT * FROM EMP_05;

no rows selected

SQL>
- TRUNCATE 명령어는 DDL로써 자동 커밋이 일어나기 때문에 DML 명령어인 DELETE와는 표면적인 기능은 같을지 모르겠지만 중요한 차이가 있습니다.
- DELETE 명령어를 수행할때 아무런 조건도 명시하지 않으면 테이블 내의 내용이 전부 삭제 됩니다. 하지만 테이블의 구조는 남아있습니다. 이러한 결과를 보면 DELETE와 TRUNCATE 명령어는 표면적인 기능은 같습니다. 하지만 TRUNCATE 명령어는 DDL 로써 자동 커밋이 일어나므로 삭제되기 이전 상태로 복귀할 수 없지만, DELETE는 DML 명령어이기 때문에 자동 커밋되지 않아서 언제든지 삭제되기 이전 상태로 롤백할 수 있습니다.
SQL> SELECT * FROM EMP_04
  2  ;

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7654       7698 28-SEP-81          1250       1400         30
      7566       7839 02-APR-81          2975                    20
      7844       7698 08-SEP-98          1500          0         30
      7902       7566 03-NOV-81          3000                    20
      7368       7902 17-NOV-80           800                    20
      7839            17-NOV-81          5000                    40
      7521       7698 22-FEB-81          1250        500         30
      7698       7839 01-MAY-81          2850                    30
      7782       7839 09-JUN-81          2450                    10
      7934       7782 23-JAN-82          1300                    10
      7499       7698 20-FEB-81          1600        300         30

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7788       7566 09-NOV-82          3000                    20
      7900       7698 03-NOV-81          1957                    30
      7369       7902 17-NOV-80           800                    20
      7876       7788 12-JAN-83          1100                    20

15 rows selected.

SQL> DELETE FROM EMP_04;

15 rows deleted.

SQL> SELECT * FROM EMP_04;

no rows selected

SQL> ROLLBACK;

Rollback complete.

SQL> SELECT * FROM EMP_04;

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7654       7698 28-SEP-81          1250       1400         30
      7566       7839 02-APR-81          2975                    20
      7844       7698 08-SEP-98          1500          0         30
      7902       7566 03-NOV-81          3000                    20
      7368       7902 17-NOV-80           800                    20
      7839            17-NOV-81          5000                    40
      7521       7698 22-FEB-81          1250        500         30
      7698       7839 01-MAY-81          2850                    30
      7782       7839 09-JUN-81          2450                    10
      7934       7782 23-JAN-82          1300                    10
      7499       7698 20-FEB-81          1600        300         30

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7788       7566 09-NOV-82          3000                    20
      7900       7698 03-NOV-81          1957                    30
      7369       7902 17-NOV-80           800                    20
      7876       7788 12-JAN-83          1100                    20

15 rows selected.

# 롤백이 가능하기 위해서는 하나의 행을 기준으로 수행될 때 무수히 많은 BEFORE IMAGE가 생성 됩니다. 그러므로 롤백 세그먼트에 허용량을 초과할 수 있습니다. 그러므로 만일 확신이 서는(명확히 삭제해야 하는)경우 DELETE 보다는 TRUNCATE 가 효율적입니다.
# TRUNCATE 는 한 테이블에 속하는 모든 로우를 잘라내는 것이지만, DELETE 명령어는 삭제하고자 하는 로우들을 선택할 수 있습니다.
SQL> SELECT * FROM EMP_04;

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7654       7698 28-SEP-81          1250       1400         30
      7566       7839 02-APR-81          2975                    20
      7844       7698 08-SEP-98          1500          0         30
      7902       7566 03-NOV-81          3000                    20
      7368       7902 17-NOV-80           800                    20
      7839            17-NOV-81          5000                    40
      7521       7698 22-FEB-81          1250        500         30
      7698       7839 01-MAY-81          2850                    30
      7782       7839 09-JUN-81          2450                    10
      7934       7782 23-JAN-82          1300                    10
      7499       7698 20-FEB-81          1600        300         30

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7788       7566 09-NOV-82          3000                    20
      7900       7698 03-NOV-81          1957                    30
      7369       7902 17-NOV-80           800                    20
      7876       7788 12-JAN-83          1100                    20

15 rows selected.

SQL> DELETE FROM EMP_04
  2  WHERE EMPNO IN(7788, 7900);

2 rows deleted.

SQL> SELECT * FROM EMP_04;

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7654       7698 28-SEP-81          1250       1400         30
      7566       7839 02-APR-81          2975                    20
      7844       7698 08-SEP-98          1500          0         30
      7902       7566 03-NOV-81          3000                    20
      7368       7902 17-NOV-80           800                    20
      7839            17-NOV-81          5000                    40
      7521       7698 22-FEB-81          1250        500         30
      7698       7839 01-MAY-81          2850                    30
      7782       7839 09-JUN-81          2450                    10
      7934       7782 23-JAN-82          1300                    10
      7499       7698 20-FEB-81          1600        300         30

     EMPNO        MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- ------------ ---------- ---------- ----------
      7369       7902 17-NOV-80           800                    20
      7876       7788 12-JAN-83          1100                    20

13 rows selected.

-- DELETE 명령어로 삭제된 내용이 완전하게 데이터베이스에 적용되도록 하려면 사용자가 직접 커밋 명령을 수행해야 합.
SQL> COMMIT;

Commit complete.



참고 자료 : 클릭하세요. 오라클 10g + PL/SQL 입문

08 1, 2010 12:27 08 1, 2010 12:27

Trackback URL : http://develop.sunshiny.co.kr/trackback/532

Leave a comment

« Previous : 1 : ... 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : ... 365 : Next »

Recent Posts

  1. Linux - Telnet 서비스 비활성및 실행
  2. NT - 서버 원격데스크탑 연결
  3. NT - http와 https간에 세션 공유가...
  4. Unix - 대량 파일 이동, 삭제시 Argu...
  5. Oracle - SYS_CONTEXT 함수를 이용하...

Recent Comments

  1. 네. 고맙습니다^^ 행복한 한해 보... sunshiny 01 16,
  2. sunshiny님. 안녕하세요... 올려 주... yihans 01 16,
  3. 답글 주셔서 고맙습니다^^ 소스 복... sunshiny 01 11,
  4. 관리자만 볼 수 있는 댓글입니다. 비밀방문자 01 11,
  5. 넵 답변감사합니다^^ 좋은 하루 되... 노로링

Recent Trackbacks

  1. 윈도우 cmd 명령어 팁 월풍도원(月風道院) - Delight on th... %M
  2. 파일 압축 Like RadioHead %M
  3. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   02 2012   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. Oracle All Documentation
  4. 엑셈
  5. 오라클 클럽
  6. 네이버개발자센터
  7. API - Java
  8. API - Spring
  9. Java Community
  10. Reference - Spring
  11. 스프링사용자
  12. 자바지기
  13. Ready System
  14. Solaris Freeware
  15. Linux-Site
  16. RedHat Korea
  17. 윈디하나의 솔라나라

Site Stats

TOTAL 217714 HIT
TODAY 16 HIT
YESTERDAY 115 HIT