DDL
개요
Data Definition Language.
우리나라 말로는 데이터 정의어.
create, alter, drop, rename
데이터 객체 구조를 정의하고, 객체를 관리할 때 사용한다.
참고로 여기에서 객체라고 한다면 사용자, 테이블, 인덱스, 뷰, 트리거, 프로시저, 사용자 정의 함수 등이 있다.
CREATE
이런 식으로 간단하게 만들 수 있다
제약조건으로 not null을 걸었다.
지하철역 정보 테이블을 만든다.
제약조건은 constraint로 표현할 수도 있다.
이런 식일 때는 제약 조건 이름, 조건을 넣어준다.
참고로 primary는 그냥 not null처럼도 넣을 수 있다.
이번엔 지하철역승하차 정보에 대한 테이블을 만든다.
기본키가 복합키인 것이 보인다.
이제 외래키 관계를 설정해보자.
ALTER TABLE tb_subway_statn_tk_gff_tmp
ADD CONSTRAINT FK_TB_SUBWAY_STATN_TK_GFF_TMP1
FOREIGN KEY (SUBWAY_STATN_NO)
REFERENCES TB_SUBWAY_STATN_TMP (SUBWAY_STATN_NO)
;
alter를 사용한다.
외래키 설정을 넣을 때 reference를 지정한다.
이제부터는 지하철역승하차 테이블에 지하철역 테이블에 없는 값을 넣으려고 하면 에러가 날 것이다.
ALTER
alter는 칼럼이나 제약조건을 넣을 때 사용한다.
만들 때는 create, 이미 있는 놈을 수정할 때는 alter이다.
다양한 조작을 가할 수 있는데 사용방법을 잘 알아야 할 듯.
alter 개체형식 개체명 [매개변수]
위와 같은 방식이다.
개체형식에는 table, database 등이 들어갈 수 있다.
원하는 개체에 해당하는 형식을 넣어주면 된다.
매개변수에는 하고자하는 동작을 넣는다.
add, rename, drop, modify 등이 있다.
ALTER TABLE TB_SUBWAY_STATN_TMP ADD (OPEN_YN CHAR(1));
ALTER TABLE TB_SUBWAY_STATN_TMP DROP COLUMN OPEN_YN;
ALTER TABLE TB_SUBWAY_STATN_TMP ADD (OPEN_YN CHAR(1) NULL);
ALTER TABLE TB_SUBWAY_STATN_TMP MODIFY (OPEN_YN NUMBER(1) DEFAULT 0 NOT NULL NOVALIDATE);
위 동작은 컬럼을 추가했다 삭제했다, 속성을 변경해보는 명령어이다.
해보니까, add 뒤에는 column을 붙일 수 없고 drop 뒤에는 column이 강제된다.
헷갈리기 딱 좋게 돼있다ㅋㅋ
modify 역시 마찬가지이다;
참고로 modify는 alter와 동치라, alter alter 구문으로도 쓸 수 있다고 한다.
invalidate는 modify를 하는 경우에 넣을 수 있다.
기존에 존재하는 행에는 조건을 적용하지 않으나, 이후 삽입되는 행들에 대해 조건을 적용한다.
ALTER TABLE TB_SUBWAY_STATN_TMP RENAME COLUMN OPEN_YN TO OPERATION_YN;
ALTER TABLE TB_SUBWAY_STATN_TK_GFF_TMP DROP CONSTRAINT FK_TB_SUBWAY_STATN_TK_GFF_TMP1;
ALTER TABLE TB_SUBWAY_STATN_TK_GFF_TMP ADD CONSTRAINT FK_TB_SUBWAY_STATN_TK_GFF_TMP1
FOREIGN KEY ( SUBWAY_STATN_NO )
REFERENCES TB_SUBWAY_STATN_TMP ( SUBWAY_STATN_NO )
;
개인적으로는 더 골때리는 게, 제약 조건을 추가할 때는 add constraint로 해야 한다;
그러니까 column 추가할 때만 굳이 안 쓰고 다른 것 쓸 때는 추가를 시켜라, 이 말인 것이다.
rename은 기존과 바꿀 이름 사이에 to를 넣는다.
기타
RENAME TB_SUBWAY_STATN_TK_GFF_TMP TO TB_SUBWAY_STATN_TK_GFF_TMP_2;
TRUNCATE TABLE TB_SUBWAY_STATN_TK_GFF_TMP_2;
DROP TABLE TB_SUBWAY_STATN_TK_GFF_TMP_2;
DROP TABLE TB_SUBWAY_STATN_TMP;
DROP TABLE TB_RN_TMP;
테이블 이름을 바꿀 때는 통짜 rename을 쓴다.
alter로 rename을 하는 것은 컬럼 명을 바꾸는 것이다.
truncate는 필드를 날릴 때 사용한다.
아래 dml에서 볼 delete와는 다르게, 롤백이 불가능하다.
즉, 테이블 형태는 남아있게 된다.
반면 drop은 테이블을 정말 통째로 날려버리는 명령어이다.