Database

[Database] Ch11.DDL 데이터 정의어

OptimizerStart 2025. 5. 11. 22:36

 

Ch11.DDL 데이터 정의어

DDL

  • 저장 구조에 대한 명령어
  • DB 구조 명령어

DROP

  • 테이블 삭제
  • 자동 commit 되어 롤백 불가.
  • 인덱스까지 삭제됨

표현 

drop table 테이블명 [cascade constraints] ;

  • cascade constraints 옵션
    • 삭제하고자 하는 테이블(A)을 참조하는 다른 테이블(B)의 제약조건을 삭제함
      • A의 PK가 B의 FK로 존재
    • cascade 옵션 있을 때, 자식 테이블에 데이터 삽입 시 부모 테이블의 PK 컬럼이 가진 데이터가 아니어도 삽입 가능
      • A (부모) 테이블이 삭제 되었기 때문.
    • 데이터 유무와 무관하게, FK 제약조건 자체가 DROP을 막는다. 제약조건이 있을 때, 자식 테이블에 데이터가 없어도 부모 테이블 삭제 불가.
      • 제약조건이 메타 데이터로 존재함.

ALTER - 4

테이블에 컬럼 추가

표현

alter table 테이블명 add ( 컬럼명 데이터타입 [default 식] [constraint 정의] [ , 컬럼 데이터타입] … );

 

테이블 컬럼 수정

표현

alter table 테이블명 modify ( 컬럼명 데이터타입 [default 식] [constraint 정의] [ , 컬럼 데이터타입] … );

  • 컬럼의 크기, 타입 변경
  • 기본값, not null 제약조건 변경

사용상황

  • NULL 값을 가진 컬럼, 테이블에 데이터 없을 때

주의 사항

  • 컬럼 크기 축소 시, 컬럼에 데이터가 저장된 경우, 저장된 데이터 바이트 크기와 같거나 작을 때 에러 발생
    • ORA-01401: 열에 입력한 값이 너무 큽니다
-- 컬럼에 저장된 바이트보다 같거나 작게 컬럼 수정 -> 불가 
-- ORA-01401: 열에 입력한 값이 너무 큽니다
alter table test_emp
modify (univ varchar(15));

테이블에 정의된 컬럼 크기보다 작은 크기로 수정 불가

장점

  • 저장공간 확보
  • 버퍼 캐시 & IO 출력횟수 ↓
    • 버퍼 캐시는 블록으로 구성되는데, 이 블록에 컬럼의 크기가 줄면서 더 많은 행이 들어갈 수 있음

특징

  • DEFAULT 값을 변경하면 다음 입력(INSERT)때 적용

 

[제약조건 파트 참고 : https://optimizer.tistory.com/18]

제약조건 추가

 

표현

alter table 테이블명 add [constraint 제약조건명] 제약조건유형(컬럼명);

 

특징

  • 컬럼에 NULL 이 없을 때 NOT NULL 제약 조건 추가 가능

제약조건 변경

  1. 삭제  alter table 테이블명 drop constraint 제약조건명 [cascade];

제약조건 활성화/비활성화

  1. 활성화
    • 기존 데이터 + 신규 데이터 검증
    표현
    alter table 테이블명 enable constraint 제약조건명 ;
    • enable novalidate 옵션
    • 제약조건을 켜지만, 기존 데이터는 검사하지 않고 이후에 수행되는 insert, update만 검증
  2. 비활성화
    • 신규, 기존 데이터 모두 검증 X
    사용상황
    • 수백만건 데이터 INSERT, LOAD 시 FK, CHECKK 제약 조건 비활성화. 검증 오버헤드 줄임.
    표현
    alter table 테이블명 disable constraint 제약조건명 [cascade];

그 외의 DDL

rename 이전이름 to 새로운이름;

  • 객체의 이름 바꿈
  • 객체의 소유자만 변경 가능

truncate table 테이블명;

  • 기존 테이블 구조는 남기고 모든 행 삭제
  • 테이블이 사용한 저장공간 반환
  • rollback 불가. DDL은 자동 COMMIT 되기 때문. ⭕ 암기

cf. delete 명령은 삭제된 행 rollback 가능 (dml)

 

 

테이블 주석

comment on table 테이블명 is ‘주석에적을내용’;

  • user_tab_comments 테이블을 조회하여 주석 내용 확인 가능

컬럼 주석

comment on column 테이블명.컬럼명 is ‘주석에적을내용’;

  • user_col_comments 테이블을 조회하여 주석 내용 확인 가능