반응형
① FOREIGN KEY
- 외래키, 외부키로도 부르는 FOREIGN KEY는 서로 다른 테이블 간 관계를 정의하는데 사용하는 제약 조건이다.
- 특정테이블에서 PRIMARY KEY 제약조건을 지정한 열을 다른테이블의 특정 열에서 참조하겠다는 의미로 지정할 수 있다.
※ 참조대상테이블의 열에 존재하지 않는 데이터를 입력하려고 하면 오류가 발생한다.
부모테이블 - 참조 대상 테이블
자식테이블 - 참조하는 테이블
FOREIGN KEY 지정하는 방법
--이름지정
CREATE TABLE 테이블 이름 (
...(다른 열 정의),
열 자료형 CONSTRAINT [제약 조건 이름] REFERENCES 참조 테이블(참조할 열)
);
--이름지정 하지 않기
CREATE TABLE 테이블 이름(
...(다른 열 정의),
열 자료형 REFERENCES 참조 테이블(참조할 열)
);
--아웃오브라인
CREATE TABLE 테이블 이름 (
...(다른 열 정의),
CONSTRAINT [제약 조건 이름] FOREIGN KEY(열)
REFERENCES 참조 테이블(참조할 열)
);
▶ 참조 되고있는 부모의 데이터를 삭제하려고 하면 오류가 발생한다.
ORA-02292: 무결성 제약조건(CAROL_GOODS.FK_OD_GNUM)이 위배되었습니다
- 자식 레코드가 발견되었습니다
이런 경우 3가지 방법이 있다.
- 참조하는 테이블의 데이터를 먼저 지워주고, 부모의 데이터를 지워준다.
- 참조하는 테이블의 데이터를 수정하고, 부모의 데이터를 지워준다.
- FOREIGN KEY 제약 조건을 해제한다.
※ FOREIGN KEY 제약 조건을 해제할 수 없는 경우도 종종 있고, 이미 제약조건으로 연결된 데이터의 삭제는 꽤나 까다롭기 때문에 제약조건을 처음 지정할 때 추가옵션을 지정 하는 방법을 사용하기도 한다.
▶ 열 데이터를 삭제할 때 이 데이터를 참조하고 있는 데이터도 함께 삭제
CONSTRAINT [제약 조건 이름] REFERENCES 참조 테이블(참조할 열)
ON DELETE CASCADE;
▶ 열 데이터를 삭제 할때 이 데이터를 참조하는 데이터를 NULL로 수정
CONSTRAINT [제약 조건 이름] REFERENCES 참조테이블(참조할 열)
ON DELETE SET NULL;
② CHECK
열에 저장할 수 있는 값의 범위 또는 패턴을 정의할 때 사용한다.
ALTER TABLE GOODS
ADD CONSTRAINT CK_GAMOUNT CHECK( GAMOUNT<20);
INSERT INTO GOODS(GNUM,GNAME, GPRICE , GAMOUNT, GTYPE)
VALUES(9, 'B노트북', 100000, 30, DEFAULT);
-- ORA-02290: 체크 제약조건(CAROL_GOODS.CK_GAMOUNT)이 위배되었습니다
-- 화면구현을 할때 스크립트에서 길이제한등을 넣어 사용가능하기 때문에
DB에서 CHECK 제한을 잘 사용하지는 않는다.
③ DEFAULT
제약 조건과는 별개로 특정 열에 저장한 값이 지정 되지 않았을 경우에 기본값을 지정할 수 있는데,
그 때 사용 하는 키워드가 DEFAULT이다.
반응형
'데이터베이스' 카테고리의 다른 글
시퀸스 (0) | 2022.04.21 |
---|---|
제약조건 - UNIQUE (0) | 2022.04.20 |
제약조건 - PRIMARY KEY (0) | 2022.04.20 |
제약조건 - NOT NULL (0) | 2022.04.20 |
제약조건 (0) | 2022.04.20 |