[DB/SQLD] DML (1)

1 분 소요

INSERT문

insert문은 테이블에 데이터를 입력한다.

INSERT INTO table(column1, cloumn2, ...) VALUES (expression1, expression2, ...);

테이블에 데이터를 입력하기 위해서는 테이블명, 칼럼명, 데이터 순으로 입력한다.

만약 테이블의 모든 칼럼에 대해 데이터를 삽입하는 경우 칼럼명 생략이 가능하다.

데이터에 문자열 입력시 ‘ ‘를 사용한다.

insert문을 실행한다고해서 데이터 파일에 저장되지 않는다. 최종적으로 TCL문 commit을 실행해야 한다. 만약 Auto Commit(Set auto commit on)으로 설정된 경우 commit을 실행하지 않아도 바로 저장된다.

INSERT INTO DEPT_TEST SELECT * FROM DEPT;

위 코드처럼 select문을 이용해서 데이터를 삽입할 수 있다.

ALTER TABLE DEPT NOLOGGING;

데이터베이스에 데이터를 입력하면 로그파일에 그 정보를 기록한다. check point라는 이벤트가 발생하면 로그파일의 데이터를 데이터 파일에 저장한다. Nologging 옵션을 사용하면 로그파일의 기록을 최소화시켜 입력 성능을 향상시킬 수 있다. 이 옵션을 사용하면 buffer cache라는 메모리 영역을 생략하고 기록한다.



UPDATE문

update문에 조건문을 사용해 해당 데이터를 수정할 수 있다. 만약 조건문을 사용하지 않으면 모든 데이터가 수정된다.

UPDATE EMP
SET ENAME='lee'
where EMPNO=100;



DELETE문

delete문에 조건문을 사용해 해당 데이터를 삭제한다. 만약 조건문을 사용하지 않으면 모든 데이터가 삭제된다.

delete문으로 데이터를 삭제해도 테이블의 용량이 초기화되지 않는다.

DELETE FROM EMP WHERE EMPNO=100;



데이터 삭제 - 테이블 용량

데이블의 모든 데이터를 삭제하는 방법은 두가지이다.

  1. DELETE FROM table_name; 테이블의 모든 데이터가 삭제되지만, 테이블의 용량은 감소하지 않는다.

  2. TRUNCATE TABLE table_name; 테이블의 모든 데이터가 삭제되고, 테이블의 용량은 초기화된다.

여기서 테이블 용량이 초기화 되지 않는다는 의미는 다음과 같다.

Oracle 데이터베이스는 저장공간을 할당할 때 Extent 단위로 할당하는데 테이블에 데이터가 입력되면 Extent에 저장된다. 만약 Extent크기가 MAX_EXTENTS를 넘으면 용량초과 오류가 발생된다. 즉 최대로 저장할 수 있는 공간의 의미를 가진다. DELETE 문으로 데이터를 삭제하면 용량이 감소하지 않고, DELETE문은 삭제 여부만 표시하고 용량은 초기화되지 않는다.

SELECT TABLE_NAME, MAX_EXTENTS
FROM USER_TABLES;

위 코드로 데이터 딕셔너리에서 테이블 정보를 조회할 수 있다.