Database - Oracle DB/2주차(Database - Oracle DB)

[SQL] DB 스터디 - 09

김야키 2019. 1. 7. 16:53


제약 조건


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