- 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와는 표면적인 기능은 같을지 모르겠지만 중요한 차이가 있습니다.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>
- 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.
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.
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.
댓글 없음:
댓글 쓰기