Oracle DB DDL

강정우·2022년 7월 11일
0

DB

목록 보기
22/30
post-thumbnail

1. Create(+)

  • 서브쿼리 구문을 사용한 테이블 생성
Create table 테이블 이름
AS 서브쿼리;
  • AS절 서브쿼리의 문장이 그대로 table화 된다. 하지만 현업에서는 거의사용되지 않는다 왜냐하면 별개의 table로 단절되어있어 data의 최신화가 이루어지지 않기 때문이다.

2. Alter Table문

  • 테이블의 데이터가 잘못된 설계로 인하여 수정소요가 생길 때 사용 즉, 자주일어나면 절대 좋지 않을 문장이다.
    1.새 열 추가 column 추가
    2.기존 열 수정 datatype과 size수정
    3.열 삭제

    1. Add

  • 문법
alter table 테이블 이름
add (컬럼이름 datatype(숫자));
  • 새로 추가된 column에 추가하면 insert가 아니라 update문을 써야한다. 왜냐하면 이미 null값이 들어있기 때문이다.

  • 항상 오른쪽 맨 마지막에 붙는다.

    2. Modify

  • 문법

alter table 테이블 이름
modify (컬럼이름 datatype(숫자));
  • 만약 modify절에서 이미 size가 더 큰 data가 table에 존재한다면 error발생.

  • data가 이미 table에 있다면 datatype 변경은 X, size up은 항상 O, size down은 수정값보다 더 큰 data가 있냐 없냐에 따라 결정.

    3. Drop

  • 문법

alter table 테이블 이름
drop (컬럼이름 datatype(숫자));
  • column 삭제 그리고 중요한 것이 auto commit이기 때문에 반드시! 조심하는 것이 좋음!

  • drop 명령어는 DataDictionary에 있는 meta data까지 전부 삭제해버리기고 memory에 공간마저 전부 삭제해버리기 때문에 백업본이 없다면 절대 재고하는 것이 좋음.

  • add와 modify는 금방끝나지만 drop은 오래걸릴 수 있다. 이때 drop을 진행하게 되면 10분간 lock이 될 수 있는데 이때 lock의 규모가 table 단위이다.

  • 이 위험한 것을 방지하고자 나온것이 set unused

  • delete문 경우 디스크 조각이 남는다. 반면 DDL 명령어 들은 디스트 조각이 남지 않는다.

  • 특정 행단위 삭제는 delete문으로 하는 것이 좋다.

    4. Set Unused

  • 근본적인 원리는 Data Dictionary에는 모든 값들이 status가 used로 설정되어있는데 이 값을 바꾸어주어 사용자 눈에 안 보이게 하는 것이다. 하지만 data dictionary에 공간을 계속 차지하고 있게된다.

  • 이를 막고자 등장한 문법이 아래와 같다.

alter table 테이블 이름
drop unused columns
  • 장점은 drop과 다르게 lock이 걸리지 않아 동시성이 보장된다.

3. rename

  • 객체의 이름 변경이며 거의 사용하지 않아야할 명령어이다.
  • fk가 주로 이름으로 참조를하기 때문에 잘 못 건들면 망할 수 있다.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글