본문 바로가기
학교 강의/데베기초교양

데베기초 14주차

by hoshi03 2023. 12. 7.

외래키 제약조건

 

외래키는 부모테이블에서 참조가능한 값이어야한다

 

• 컬럼 단위로 제약 조건을 거는 방법

컬럼 하나의 정의가 끝나기 전에 제약 조건을 건다

CREATE TABLE EMP06( 
EMPNO NUMBER(4) 
CONSTRAINT EMP06_EMPNO_PK PRIMARY KEY , 
ENAME VARCHAR2(10) 
CONSTRAINT EMP06_ENAME_NN NOT NULL, 
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
CONSTRAINT EMP06_DEPTNO_FK REFERENCES DEPT(DEPTNO)
);

 

• 테이블 단위로 제약 조건을 거는 방법

 

복합키를 기본키로 주거나 alter 테이블로 제약 조건을 추가할때는 테이블 단위로 제약을 건다

CREATE TABLE EMP03( 
EMPNO NUMBER(4) CONSTRAINT EMP03_ENAME_NN NOT NULL, 
ENAME VARCHAR2(10), 
JOB VARCHAR2(9), 
DEPTNO NUMBER(4),
CONSTRAINT EMP03_EMPNO_PK PRIMARY KEY(EMPNO),
CONSTRAINT EMP03_JOB_UK UNIQUE(JOB),
CONSTRAINT EMP03_DEPTNO_FK FOREIGN KEY(DEPTNO) 
REFERENCES DEPT(DEPTNO)
);

 

• alter 문으로 기존 테이블에 제약 조건  추가하기

 

add로 기본키, 외래키 등 제약 추가

modify로 널 제약조건 추가

ALTER TABLE EMP01
ADD CONSTRAINT EMP01_EMPNO_PK PRIMARY KEY(EMPNO); 

ALTER TABLE EMP01
ADD CONSTRAINT EMP01_DEPTNO_FK 
FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO);

ALTER TABLE EMP01
MODIFY ENAME CONSTRAINT EMP01_ENAME_NN NOT NULL;

 

• 제약조건을 제거하기

drop constraint 제약명; 형태로 한다

 

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

 

ALTER TABLE EMP01
DISABLE CONSTRAINT EMP01_DEPTNO_FK;

 

ALTER TABLE table_name 
ENABLE [CONSTRAINT constraint_name];

제약조건이 있을때 자식이 부모를 참조하고 있으면 부모를 삭제하지 못한다,

제약조건을 일시적으로 비활성화 하면 부모에서 삭제가 가능하다, enable 하면 제약 조건을 다시 적용가능하다

 

• cascade로 제약조건을 연속적으로 비활성화 하거나, 제약조건을 연속적으로 제거할 수 있다

 

cascade 부터는 15주차에 이어서 작성한다

'학교 강의 > 데베기초교양' 카테고리의 다른 글

데베기초 기말 대비 정리  (1) 2023.12.20
데베기초15주차  (0) 2023.12.14
데베기초 13주차  (0) 2023.11.30
데베기초 12주차  (0) 2023.11.23
데베기초 11주차 DDL  (0) 2023.11.16