무결성 제약조건
- not null : 널 값이 입력되지 못하게 하는 조건
- unique : 중복된 값이 입력되지 못하게 하는 조건
- check : 주어진 값만 허용하는 조건
- primary key : not null + unique + index의 의미
- foreign key : 다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 조건
- unique 제약으로 들어가는 컬럼들은 그들의 조합이 유일해야 한다.
- 각 컬럼의 데이터의 유일함은 의미가 없고, 조합이 유일해야 한다.
constraints 제약명 unique(컬럼1, 컬럼2, ..)
CREATE TABLE unique_test2( col1 varchar2(20), col2 varchar2(20), CONSTRAINTS temp_unique2 unique(col1, col2) );
CREATE TABLE check_test( gender varchar2(10) NOT NULL CONSTRAINTS check_gender CHECK (gender IN('M','F')) );
PK ; Primary Key
- 기본키 역시 기본적인 제약조건들은 테이블을 생성할 때 같이 정의한다.
- 테이블당 하나만 정의가 가능하다.
(두개 이상의 PK는 조합키/복합키라고 불리며 묶어서 하나로 봄)
- 주키 / 기본키 / 식별자 / PK 등으로 불리고 있다.
- PK는
NOT NULL + UNIQUE + Index
- 자동 Index가 생성되는데 이는 검색 키로써 검색 속도를 향상시킨다.
방법1) create table pkTest( pkCol1 varchar2(10) primary key );
방법2) create table pkTest( pkCol1 varchar2(10) constraints pk이름 primary key );
방법3) create table pkTest( pkCol1 varchar2(10), pkCol2 varchar2(10), pkCol3 varchar2(10), constraints pk이름 primary key(pkCol1) );
FK ; Foreign Key
- 외부키 / 외래키 / 참조키 / 외부 식별자 / FK 등으로 불린다.
- FK가 정의된 테이블을 자식 테이블이라고 칭한다.
- 참조되는 테이블 즉, PK가 있는 테이블을 부모 테이블이라고 한다.
- 부모 테이블은 PK 컬럼에 존재하는 데이터만 자식 테이블에 입력할 수 있다.
- 부모 테이블은 자식의 데이터나 테이블이 삭제 된다고 영향을 받지 않는다.
- 참조하는 데이터 컬럼과 데이터 타입은 반드시 일치해야 한다.
- 참조할 수 있는 컬럼은 기본키(PK)이거나 UNIQUE만 가능
- 보통 PK랑 엮는다.
방법 ex1) create table fk_test ( department_id varchar2(10) constraints fk이름 references departments(department_id) );
방법 ex2) create table fk_test ( department_id varchar2(10), ... , constraints dept_fk foreign key(department_id) references departments (department_id) );
📌 ON DELETE CASCADE
✔️ 참조되는 부모 테이블의 행에 대한 delete를 허용한다. 즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로
자식 테이블값 역시 삭제
된다.CREATE TABLE daughter( idx number(10) PRIMARY KEY, mID number(10), CONSTRAINTS fk_da FOREIGN KEY (mID) REFERENCES daddy(mID) ON DELETE CASCADE );
📌 ON DELETE SET NULL
✔️ 참조되는 부모 테이블의 행에 대한 delete를 허용한다. 즉, 부모테이블 값이 삭제가 되면해당 참조하는
자식 테이블의 값들은 null 값
으로 설정된다.CREATE TABLE daughter2( idx number(10) PRIMARY KEY, mID number(10), CONSTRAINTS fk_da2 FOREIGN KEY (mID) REFERENCES daddy2(mID) ON DELETE SET NULL );