오라클 데이터 무결성(Data Integrity) 제약조건(Constraints), primarykey, foreignkey, not null, unique, check, 외래키, 주키, 참조무결성
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=633
8.1.6 데이터 무결성(Data Integrity) 제약조건(Constraints)
무결성 제약조건이란?
n IC(Integrity Constraints)는 하나의 테이블내의 칼럼 값에 대해 제약을 가하는 조건으로 데이터값의 무결함, 정확성, 일관성을 보장하기 위한 방법이다.
n 무결성 제약조건에 맞지 않는 데이터가 입력되면 DML(INSERT, UPDATE, DELETE, MERGE)은 롤백된다.
n 테이블 생성시 또는 생성 후 무결성 제약조건 추가 가능 하다.
n 테이블의 모든 무결성 제약조건은 데이터 딕셔너리에 저장된다.
n 제약조건을 지정할 때 이름을 부여하지 않으면 오라클 내부적으로 SYS_Cn 형태로 이름이 부여된다
무결성 제약조건 정의
컬럼 레벨(Column Constraints Level) : 단일 칼럼에 정의하는것으로 칼럼의 정의가 끝나기 전에 제약조건을 정의하며 모든 무결성 제약조건을 지정 가능하다.
테이블 레벨(Table Constraints Level) : 칼럼에 대한 정의가 모든 끝난 후 콤마(,)을 찍고 그 다음에 제약조건을 기술하는 것으로 한 개 또는 여러 칼럼에 대해 정의가 가능하며, NOT NULL 제약조건은 칼럼레벵에서만 정의가 가능하다.
[기본 형식]
칼럼 레벨 :column_name [CONSTRAINT constraint_name] constraint_type
테이블 레벨 : column,,, [CONSTRAINT constraint_name]constraint_type(column_name,,,)
NOT NULL 제약조건
n 칼럼의 값이 NULL 일 수 없다는 제약조건 이다.(반드시 NULL이 아닌 값을 가져야 한다)
n 칼럼 레벨로만 정의가 가능하며 NOT NULL 같이 DEFAULT 값도 지정 가능하다.
n 테이블에 값을 INSERT할 경우 NOT NULL 칼럼은 반드시 기술해야 한다.(DEFAULT로 정의한 경우는 제외)
Unique Key 제약조건
n 칼럼의 값은 유일해야 한다는 제약조건으로 하나의 칼럼 또는 여러 칼럼(32개이내)으로 정의 가능하다.
n NULL값은 항상 유일하므로 입력이 가능 하다.
n 칼럼 레벨, 테이블 레벨(주로 복합칼럼으로 제약조건을 만드는 경우) 모두 정의 가능하다.
n Unique Key 제약조건이 지정되면 제약조건과 같은 이름의 인덱스가 자동으로 생성된다.
Primary Key 제약조건
n 한 테이블에서 레코드를 유일하게 구별하기 위한 키로써 주키 또는 기본키라고 부른다.
n 한 테이블당 하나의 PK만 가질 수 있다.
n PK로 지정된 칼럼은 NULL값을 가질 수 없다.
n PK로 지정된 칼럼은 자동 NOT NULL이고 Unique Key 제약조건을 가지고 제약조건의 이름으로 Unique Key Index를 생성한다.
n 칼럼 레벨 또는 테이블 레벨로 정의 가능하며 PK칼럼이 여러 개인 경우 테이블 레벨로 정의해야 한다.
외래키(Foreign Key) 제약 조건
n 외래키 제약조건은 한 테이블의 칼럼 값이 참조되는 테이블의 PK, UK 값만 오도록 할 때 지정하는 제약조건 이다. 즉 외래키로 지정할 때 참조되는 테이블의 칼럼은 Primary Key 또는 Unique Key 이어야 한다.
n 외래키를 포함한 테이블을 자식테이블(Detail/Child Table)이라 하며 참조되는 키(Referencial Key)를 가지는 테이블을 부모 테이블(Master/Parent Table) 이라고 한다.
n 부모 테이블의 PK, UK를 참조하는 자식테이블의 칼럼을 외래키 칼럼이라 하고 부모 테이블의 칼럼을 참조 키라고 한다.
n 외래키와 참조되는 키가 하나의 테이블에 존재할 수 있으며 이를 자기참조(Self Reference)라고 하고 이 경우 부모테이블과 자식테이블이 동일하다.(EMP 테이블에서 mgr 칼럼은 외래키 칼럼으로 empno 컬럼을 참조한다.)
CHECK 제약조건
칼럼에 입력되는 값의 범위를 지정하거나 특정한값만 입력 받고자 할 때 사용하는 제약조건
( 예 : myemp1 테이블의 성별 칼럼에는 ‘M’ or ‘F’ 만 입력 가능하도록 설정하고자 할 때)
무결성 제약 조건의 삭제
ALTER TABLE table_name DROP CONSTRAINT constraint_name [CASCADE]
만약 부모테이블의 PK를 삭제하는 경우 자식테이블에 외래키가 형성되어 있다면 오류가 발생한다. 이 경우 자식테이블의 외래키를 먼저 삭제하거나 제약조건 삭제시 CASCADE 옵션으로 삭제가 가능하다.
무결성 제약조건의 활성화, 비활성화
가끔은 대량의 데이터를 입력하는 경우 제약조건 검사로 인해 시간이 오래 걸리거나 일부 데이터 오류로 인해 무결성 제약조건을 비활성화 해야 될 경우가 있다. 이러한 경우 제약조건을 비활성화 한 후 다시 활성화 하면 된다.
[기본 형식]
ALTER TABLE table_name ENABLE[NOVALIDATE] CONSTRAINT constraint_name
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name
무결성 제약조건 조회
USER_CONSTRAINTS 또는 USER_CONS_COLUMNS를 이용하여 테이블에 생성된 제약조건을 검사 또는 제약조건이 생성된 칼럼을 조회 할 수 있다.
댓글 없음:
댓글 쓰기