제약 조건
1. 제약 조건 포함
- 제약 조건은 테이블 레벨에서 규칙을 강제 적용 시킴
- 제약 조건은 테이블에 종속 관계가 있는 경우 삭제를 방지
- 잘못된 입력을 방지
- 유효한 제약 조건의 유형
-> NOT NULL : NULL을 허용하지 않음
-> UNIQUE : 들어오는 값이 중복만 이루어지지 않으면 됨, NULL은 들어올 수 있음
-> PRIMARY KEY : 기본키, 동일한 값이 있을 수 없음(NOT NULL + UNIQUE)
-> FOREIGN KEY : 다른 테이블 혹은 자신의 테이블의 값을 참조할 수 있음
-> CHECK : 조건 식, 조건에 위배되지 않는 값만 들어올 수 있음
- 테이블을 만들 때 정의할 수 있음
- 테이블을 만들고 난 뒤 추가할 수 있음
2. 제약 조건 지침
- 사용자가 제약 조건의 이름을 지정하거나 Oracle Server가 SYS_Cn 형식을 사용하여 이름을 생성할 수 있음
- 다음 시점 중 하나에서 제약 조건을 생성
-> 테이블이 생성되는 시점(컬럼 레벨)
-> 테이블 생성 후(테이블 레벨)
- 열 또는 테이블 레벨에서 제약 조건을 정의
- 데이터 딕셔너리에서 제약 조건 확인
- FOREIGN KEY로 정의된 컬럼은 참조하는 테이블의 컬럼에 해당하는 값만 추가할 수 있음
-> 상위 테이블의 키를 참조하라는 의미
- 만약 기본키로 잡고있는 행이 다른 테이블에서 FOREIGN KEY로 지정 한다면 해당 행은 삭제할 수 없음
-> ERROR : child record found
- ON DELETE CASCADE
-> 참조되는 키를 삭제할 때 해당 컬럼을 FOREIGN KEY로 가지고있는 테이블의 행들도 함께 삭제
예)
->
-- 컬럼 레벨의 제약조건이 추가 된 emp2 테이블
CREATE TABLE emp2(
empno NUMBER(4) PRIMARY KEY, -- PK
ename VARCHAR2(10) NOT NULL,
email VARCHAR2(10) UNIQUE,
sal NUMBER(7,2) CHECK(sal > 0),
mgr NUMBER(4) REFERENCES emp2(empno),
deptno NUMBER(2) REFERENCES dept (deptno) );
-- 테이블 레벨의 제약 조건이 추가된 emp3 테이블
CREATE TABLE emp3(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
email VARCHAR2(10),
sal NUMBER(7,2),
deptno NUMBER(2) REFERENCES dept (deptno),
CONSTRAINT EMP3_PK PRIMARY KEY(empno, ename),
-- PK (두 컬럼을 PK로 만들 수 있음)
CONSTRAINT EMP3_UK UNIQUE(EMAIL),
CONSTRAINT EMP3_CK CHECK(SAL>0),
CONSTRAINT EMP3_FK FOREIGN KEY(DEPTNO)
REFERENCES DEPT(DEPTNO) ON DELETE CASCADE);
-- 제약 조건의 확인 방법
SELECT *
FROM user_constraints
WHERE TABLE_NAME IN ('COPY_EMP', 'EMP2', 'EMP3');
-- C : NOT NULL, CHECK
-- R : FOREIGN KEY
-- U : UNIQUE
-- P : PRIMARY KEY
3. 제약 조건의 위반
- 값의 유효성을 확인해서 잘못된 입력 혹은 수정을 방지
'Database - Oracle DB > 2주차(Database - Oracle DB)' 카테고리의 다른 글
[SQL] DB 스터디 - 12 (0) | 2019.01.08 |
---|---|
[SQL] DB 스터디 - 11 (0) | 2019.01.08 |
[SQL] DB 스터디 - 10 (1) | 2019.01.08 |
[SQL] DB 스터디 - 08 (0) | 2019.01.07 |
[SQL] DB 스터디 - 07 (0) | 2019.01.07 |