1. 외래키 (Foreign Key)
CONSTRAINT 제약조건명 FOREIGN KEY(컬럼) REFERENCES 부모테이블(컬럼);
외래키는 기본키(Primary Key) 값이 있는 테이블을 다른 테이블을 연결할 때 사용된다.
외래키 제약 조건을 설정할 때 참조되는 테이블은 UNIQUE나 PRIMARY KEY 제약 조건이 설정되어 있어야 한다.
외래키가 포함된 테이블을 자식 테이블(Child Table)이라고 하고 외래키 값을 제공하는 테이블(참조되는 테이블)을 부모 테이블(Parent Table)이라한다. 테이블이 연결되면 자식 테이블은 부모 테이블에 의존하게 되는 것이다.
기본키(PK)를 가지고 있는 테이블(부모테이블)이 생성되어야, 외래키(FK)를 가지는 테이블(자식테이블)을 생성할 수 있다.
외래키 값은 NULL이거나 부모 테이블의 기본키 값과 동일해야한다. (참조 무결성 제약조건)
Foreign Key의 이름은 중복되서는 안된다.
2. 부모테이블, 자식테이블
CREATE TABLE MASTER(
M_CODE CHAR(10BYTE) PRIMARY KEY,
M_NAME VARCHAR2(100BYTE)
);
CREATE TABLE SLAVE(
S_CODE CHAR(6 BYTE) PRIMARY KEY,
M_CODE CHAR(10BYTE),
S_NAME VARCHAR2(100BYTE),
CONSTRAINT NOT_NULL_M_CODE CHECK (M_CODE IS NOT NULL));
부모테이블 MASTER와 자식테이블 SLAVE를 생성했다.
부모테이블의 M_CODE는 기본키로 설정했고, 자식테이블의 M_CODE는 외래키로 연결해야 한다.
외래키도 기본키와 같은 제약조건이다. 제약조건 등록은 테이블을 생성할 때 해도 되지만, ALTER를 이용해 추가적으로 등록 할 수도 있다.
3. 외래키 등록
ALTER TABLE 자식테이블 ADD CONSTRAINT 제약조건이름 FOREIGN KEY(외래키지정할컬럼) REFERENCES 부모테이블(부모테이블기본키)
ALTER TABLE SLAVE ADD CONSTRAINT SLAVE_M_CODE_FK FOREIGN KEY(M_CODE) REFERENCES MASTER(M_CODE);
제약조건은 자식테이블에 걸리는 것이기 때문에 제약조건이름을 설정할 때 자식테이블명을 포함해주었다.
(M_CODE)는 같은 이름이지만 FOREIGN KEY()의 M_CODE는 자식테이블의 외래키 컬럼, 부모테이블()의 M_CODE는 부모테이블 기본키 컬럼이다.
INSERT INTO SLAVE(S_CODE,M_CODE,S_NAME) VALUES('A1234','1','홍길동');
외래키로 묶어놓으면 참조무결성때문에 부모테이블에 있는 데이터만 입력할 수 있다.
부모테이블의 M_CODE에 존재하지 않는 값을 자식테이블에 데이터로 추가하면 오류가 난다.
부모테이블 MASTER의 M_CODE에 있는 값만 넣을 수 있다.
4. CASCADE
부모 테이블의 데이터 삭제나 변경시 자식 테이블의 데이터에도 적용하기 위해 제약조건 CASCADE를 이용한다.
ALTER TABLE SLAVE ADD CONSTRAINT SLAVE_M_CODE_FK FOREIGN KEY(M_CODE)
REFERENCES MASTER(M_CODE) ON DELETE CASCADE;
자식이 있는 상태에서 주인 먼저 죽일수 없음 child record found
외래키 추가시 부모 테이블에서 데이터가 제거 되면 해당 자식 데이터도 삭제
ON DELETE CASCADE : 참조되는 부모 테이블의 행에 대한 DELETE를 허용한다.
ALTER TABLE SLAVE ADD CONSTRAINT SLAVE_M_CODE_FK FOREIGN KEY(M_CODE)
REFERENCES MASTER(M_CODE) ON DELETE SET NULL;
외래키 추가시 부모 테이블에서 데이터가 제거 되면 해당 자식 데이터는 NULL로 셋팅
ON DELETE SET NULL : 참조되는 부모 테이블의 행에 대한 DELETE를 허용한다.
5. 제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
'DBMS > Oracle' 카테고리의 다른 글
제약조건 CONSTRAINT 종류, 생성, 수정, 조회, 삭제, 활성/비활성 (0) | 2022.05.20 |
---|---|
시퀀스 SEQUENCE - 생성, 기본설정값, 조회 (0) | 2022.05.20 |
조인 JOIN : 내부조인(동일조인, 자연조인, 교차조인) / 외부조인(+) : LEFT, RIGHT (2) | 2022.05.20 |
정렬 ORDER BY / 순번 ROWNUM (1) | 2022.05.20 |
그룹화(GROUP BY) , 그룹 함수(SUM, AVG, MAX, MIN, COUNT, STDDEV, VARIANCE) (2) | 2022.05.20 |