자. 무결성 제약 조건이란 무었인가를 가지고 한번 이야기 해보자. 영어로는 Integrity Constraints이다. 즉 한마디로 정의 하자면 데이터가 정확하게 들어가야 되는데 이것을 데이터 베이스에서 정확하게 데이터가 인입될수 있도록 제공 하는 기능이다.
NULL
- NULL은 컬럼의 속성 중 하나로 해당 컬럼이 NULL 값을 허용하는지 허용하지 않는지를 정해 줄 수 있 다.
NULL 과 (' ')이 다른점은 NULL 은 NULL 값이고 공백은 SPACE 이다.
UNIQUE
- 테이블에 있는 데이터를 유일하게 식별하기 위한 무결성 제약 조건중 하나.
uni_col2 VARCHAR(10) UNIQUE
이렇게 UNIQUE로 컬럼을 생성하고 값들을 입력 할수가 있는데 중복된 값이 들어가면 오류가 발생 한다.
한가지 재미있는점은 NULL이 입력되면 에러가 발생할 것 같지만 의외로 정상적으로 입력 된다.
왜냐하면 NULL 은 값이 없음을 의미하므로 UNIQUE 키 비교대상에서 제외 되기 때문이다.
한마디로 UNIQUE 키는 NULL 을 무시한다. 하지만 NULL 대신 (' ' )공백을 넣은다면 오류가 발생한다.
기본키
- 기본키는 UNIQUE + NOTNULL 이다. 어떠한 컬럼을 기본키로 지정하면 UNIQUE 인덱스와 NOT NULL 속성을 가지게 된다.
생성된 제약조건들에 대한 정보는 USER_CONSTRANTS 시스템 뷰로 조회하여 확인 할 수 있다.
기본키를 생성하지 않아도 ALTER 문으로 기본키를 수정해 줄 수가 있는데 다음과 같다.
ADD CONSTRAINTS "emp_emp_id_pk" PRIMARY KEY (employee_id);
외래키
- 외래키를 한마디로 정의하자면 자식 테이블의 구분이 되는 키이다.
department_id 컬럼에 fk_deptno라는 이름의 외래 키 생성구문
REFERENCES departments (department_id) ); /인라인/
department_id 컬럼에 fk_deptno라는 이림의 외래키 생성 구문
FOREIGN KEY (department_id)
REFERENCES departments( department_id ) 아웃라인
테이블 생성 후 department_id 컬럼에 kf_deptno 라는 이름으로 외래 키를 추가로 생성하는 구문
ADD CONSTRAINTS fk_deptno FOREIGN KEY(department_id)
REPERENCES departments( department_id );
외래키 제약사항
1. 부모 테이블이 먼저 생성되고 참조하는 부모의 컬럼은 반드시 UNIQUE 나 기본키여야 한다.
2. LOB,LONG,LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, 사용자 정
의 데이터 타입은 외래 키로 지정 불가
3. 32개까지 외래키를 생성(복합 외래키)
4. 자식 테이블에 존재하는 값을 부모테이블에서 삭제할 수 없다. 자식 먼저 삭제 그다음 부모 삭제 반대로 인서트는
부모 먼저 인서트 하고 자식 인서트를 해야 한다.
CHECK
- 값을 체크하여 일정한 조건에 해당되는 값만 입력될 수 있게 하는 제약조건이다.
테이블 복사
- 기존에 있던 테이블을 그대로 복사하는 방법이다. 이경우 테이블 이름은 중복되지 않게 많들어 줘야 하지만 스키마가 다르면 상관이 없다.
SELECT * FROM EMPLOYEES;
제약 사항
- 원본 테이블의 인덱스 복사하지 않음.
- 여러가지 제약 사항중 NULL, NOT NULL 속성만 복사
- LONG 타입 컬럼은 복사할 수 없다.
Exercise 4