DataBase/Oracle

11. Oracle 무결성 제약조건

유가엘 2020. 3. 28. 00:55

10.Constraint.sql
0.00MB

NOT NULL : NULL 값이 입력되지 못하게 하는 조건

CREATE TABLE NULL_TABLE( 
    FIELD1 VARCHAR2(20) NOT NULL, 
    FIELD2 VARCHAR2(20) NULL, 
    FIELD3 VARCHAR2(20)  
); 

INSERT INTO NULL_TABLE (FIELD1,FIELD2) VALUES ('AA','BB');  --  정상적으로 삽입됩니다. 
INSERT INTO NULL_TABLE (FIELD2,FIELD3) VALUES ('CC','DD');  --  에러가 발생합니다.(FIELD1은 값이 반드시 들어가야합니다.) 

 

UNIQUE : 중복된 값이 입력되지 못하게 하는 조건  ( NULL 값을 허용합니다. )

CREATE TABLE UNIQUE_TABLE( 
    FIELD1 VARCHAR2(20) UNIQUE NOT NULL, 
    FIELD2 VARCHAR2(20) UNIQUE, 
    FIELD3 VARCHAR2(20) NOT NULL, 
    FIELD4 VARCHAR2(20) NOT NULL, 
    CONSTRAINTS TEMP_UNIQUE UNIQUE(FIELD3,FIELD4) --FIELD 3,4 번을 합한 값이 중복이 되서는 안된다는 의미입니다. 
); 


INSERT INTO UNIQUE_TABLE(FIELD1,FIELD2,FIELD3,FIELD4)   --  정상적으로 삽입됩니다. 
VALUES ('AA','BB','CC','DD'); 
INSERT INTO UNIQUE_TABLE(FIELD1,FIELD2,FIELD3,FIELD4)    
VALUES ('AA2','BB2','CC2','DD2'); 

UPDATE UNIQUE_TABLE SET FIELD1 = 'AA' WHERE FIELD2 ='BB2';  --  에러가 발생합니다.(FIELD1 에 이미 AA라는 값이 있기 때문에 발생하게됩니다.) 


INSERT INTO UNIQUE_TABLE(FIELD1,FIELD2,FIELD3,FIELD4)   --  정상적으로 삽입됩니다.(FIELD2 는 NULL을 허용합니다.) 
VALUES ('AA3','','CC3','DD3'); 
INSERT INTO UNIQUE_TABLE(FIELD1,FIELD2,FIELD3,FIELD4) 
VALUES ('AA4','','CC4','DD4'); 

 

PRIMARY KEY : NOT NULL + UNIQUE 와 같습니다.
테이블 생성 시 PK 등록

CREATE TABLE PRIMARY_TABLE( 
    FIELD1 NUMBER(10) PRIMARY KEY,  -- 인라인 방식 ( 오라클에서 자동으로 생성되며 SYS_XXX..로생성됩니다) 
    FIELD2 VARCHAR2(20) 
); 

CREATE TABLE PRIMARY_TABLE( 
    FIELD1 NUMBER(10) , 
    FIELD2 VARCHAR2(20) 
    CONSTRAINTS FIELD1_PK PRIMARY KEY(FIELD1);  -- 아웃라인 방식 
); 

 

테이블 생성 후 PK 생성

ALTER TABLE PRIMARY_TABLE ADD CONSTRAINTS "기본키 이름" PRIMARY KEY (필드명); 

 

FOREIGN KEY :   (외래키 - 참조키) 다른 테이블의 필드(컬럼)을 참조해서 무결성을 검사하는 조건
                       부모테이블의 키값이 변경되었을 경우, 자식 테이블에 참조키가 맞지 않을경우 에러가 발생합니다.
                       부모테이블의 컬럼은 참조키 , 자식 테이블의 컬럼은 외래키라고 부릅니다.

테이블 생성 시 FK 등록 

CREATE TABLE FOREIGN_KEY( 
    FIELD1 CONSTRAINTS DEPT_FK 
    REFERENCES DEPARTMENTS (DEPARTMENT_ID)    -- 인라인 방식 : FIELD1은 부모테이블의 DEPARTMENT_ID 에 반드시 존재해야합니다 
); 

CREATE TABLE FOREIGN_KEY( 
    FIELD1 
    CONSTRAINTS DEPT_FK 
    FOREIGN KEY(FIELD1) 
    REFERENCES DEPARTMENTS (DEPARTMENT_ID)    -- 아웃라인 방식 : FIELD1은 부모테이블의 DEPARTMENT_ID 에 반드시 존재해야합니다 
); 

 

테이블 생성 후 FK 생성

ALTER TABLE FOREIGN_KEY ADD CONSTRAINTS DEPT_FK 
    FOREIGN KEY(FIELD1) 
    REFERENCES DEPARTMENTS (DEPARTMENT_ID); 

CHECK : 주어진 조건에 맞는 값만 허용하는 조건

CREATE TAB;E CHECK_TABLE( 
    GENDER VARCHAR2(10) NOT NULL 
    CONSTRAINTS CHECK_SEX CHECK (GENDER IN('M','F')) 
);