데이터베이스

제약조건 - FOREIGN KEY와 CHECK,DEFAULT

야생늑대 2022. 4. 20. 19:55
반응형

① 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가지 방법이 있다.

  1. 참조하는 테이블의 데이터를 먼저 지워주고, 부모의 데이터를 지워준다.
  2.  참조하는 테이블의 데이터를 수정하고, 부모의 데이터를 지워준다.
  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