ORACLE SQL

제약조건

마이구미2 2021. 3. 3. 10:37

제약조건 (CONSTRAINT)

컬럼에 대한 속성 정의

데이터 무결성을 보장하기 위한 용도로 사용

부적절한 데이터가 들어오는 것을 사전에 차단하도록 규칙을 정하는 것

제약조건은 컬럼의 소성처럼 사용하지만, 엄연히 데이터베이스의 객체이므로 고유 이름(제약조건명)을 지정해야 함

지정하지 않는 경우 자동으로 부여됨

 

제약조건 종류

- NOT NULL

- UNIQUE

- PRIMARY KEY

- FOREIGN KEY

- CHECK

 

제약조건 확인

USER_CONSTRAINTS 데이터 사전 활용

컬럼명 설명
OWNER 제약조건 소유 계정
CONSTRAINT_NAME 제약조건 이름(직접 지정하지 않을 경우 오라클이 자동으로 지정)
CONSTRAINT_TYPE 제약조건 종류
C: CHECK, NOT NULL
U: UNIQUE
P: PRIMARY KEY
R: FOREIGN KEY
TABLE_NAME 제약조건을 지정한 테이블명
-- 제약조건 정보 확인
SELECT * FROM USER_CONSTRAINTS;

-- 테이블 정보 확인
SELECT * FROM USER_TABLES;

 


NOT NULL

지정한 컬럼에 NULL의 저장을 허용하지 않는 제약조건

NULL을 제외한 데이터의 중복 허용

컬럼에만 적용 가능(테이블 불가)

반드시 컬럼에 값이 존재해야만 하는 경우에 지정

CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명	데이터타입	NOT NULL,
    컬럼명	데이터타입	NOT NULL,
    ...
);


-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명1	데이터타입	
    CONSTRAINT 제약조건명1 NOT NULL,
    컬럼명2	데이터타입
    CONSTRAINT 제약조건명2 NOT NULL,
    ...
);

 

UNIQUE

지정한 컬럼에 저장할 데이터의 중복을 허용하지 않는 제약조건

NULL은 값이 존재하지 않음을 의미하기 때문에 중복 대상에서 제외됨(여러 개 존재 가능)

CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명	데이터타입	UNIQUE,
    컬럼명	데이터타입	UNIQUE,
    ...
);


-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명1	데이터타입
    CONSTRAINT 제약조건명1 UNIQUE,
    컬럼명2	데이터타입
    CONSTRAINT 제약조건명2 UNIQUE,
    ...
);

 

PRIMARY KEY

UNIQUE와 NOT NULL 제약조건의 특성을 모두 가지는 제약조건

데이터 중복을 허용하지 않고 NULL도 허용하지 않음

테이블 당 하나만 지정 가능하지만 여러 컬럼을 묶어 하나로 만드는 것 가능

특정 컬럼을 PRIMARY KEY로 지정하면 해당 컬럼에는 자동으로 인덱스 생성

CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명	데이터타입	PRIMARY KEY,
    컬럼명	데이터타입,
    ...
);


-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
    컬럼명1	데이터타입,
    컬럼명	데이터타입,
    컬럼명	데이터타입,
    ... ,
    CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1)
);

CREATE TABLE 새로운_테이블명(
    컬럼명1	데이터타입,
    컬럼명2	데이터타입,
    컬럼명	데이터타입,
    ... ,
    CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1, 컬럼명2)
);

 

FOREIGH KEY

서로 다른 테이블 간 관계를 정의하는 데 사용하는 제약조건

특정 테이블에서 PRIMARY KEY 제약 조건을 지정한 컬럼을 다른 테이블의 특정 컬럼에서 참조한다는 의미

다른 테이블의 컬럼을 참조하여 존재하는 데이터만 입력 가능

CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입	REFERENCES 참조할_테이블명(참조할_컬럼명),
    컬럼명	데이터타입	REFERENCES 참조할_테이블명(참조할_컬럼명),
    컬럼명	데이터타입
    ...
);


-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
    컬럼명1	데이터타입
    CONSTRAINT 제약조건명1 REFERENCES 참조할_테이블명1(참조할_컬럼명1),
    컬럼명2	데이터타입
    CONSTRAINT 제약조건명2 REFERENCES 참조할_테이블명2(참조할_컬럼명2),
    컬럼명	데이터타입,
    ...
);

CREATE TABLE 새로운_테이블명(
    컬럼명1	데이터타입,
    컬럼명2	데이터타입,
    컬럼명	데이터타입,
    ... ,
    CONSTRAINT 제약조건명1 FOREIGN KEY(컬럼명1) REFERENCES 참조할_테이블명1(참조할_컬럼명1),
    CONSTRAINT 제약조건명2 FOREIGN KEY(컬럼명2) REFERENCES 참조할_테이블명2(참조할_컬럼명2)
);

* 참조되는 컬럼은 반드시 PRIMARY KEY이어야 함

 

ON DELETE CASCADE

참조할 테이블에서 특정 데이터를 삭제했을 때, 참조된 테이블에서 특정 데이터를 포함한 데이터도 함께 삭제하고 싶은 경우 

FOREIGN KEY(컬럼명) REFERENCES 참조할_테이블명(참조할_컬럼명) ON DELETE CASCADE

ON DELETE SET NULL

참조할 테이블에서 특정 데이터를 삭제했을 때, 참조된 테이블에서 특정 데이터를 포함한 데이터의 값을 NULL로 변경하고 싶은 경우

FOREIGN KEY(컬럼명) REFERENCES 참조할_테이블명(참조할_컬럼명) ON DELETE SET NULL

 

CHECK

컬럼에 저장할 수 있는 데이터의 범위 또는 패턴을 정의할 때 사용

설정한 조건식을 만족하는 데이터만 입력 가능

-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
    컬럼명1	데이터타입
    CONSTRAINT 제약조건명1 CHECK (조건1),
    컬럼명2	데이터타입
    CONSTRAINT 제약조건명2 CHECK (조건2),
    컬럼명	데이터타입,
    ... ,
);

 


제약조건 변경

-- 제약조건 수정|추가
ALTER TABLE 테이블명
[MODIFY|ADD] (컬럼명 데이터타입 제약조건);

-- 제약조건 이름 변경
ALTER TABLE 테이블명
RENAME CONSTRAINT 제약조건명 TO 변경할_제약조건명;

-- 제약조건 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;

ALTER TABLE 테이블명
DROP PRIMARY KEY;

 

DEFAULT

제약조건과는 별개로 특정 컬럼에 저장할 값이 지정되지 않았을 경우, 기본값(default) 지정 가능

CREATE TABLE 새로운_테이블명(
    컬럼명	데이터타입,
    컬럼명	데이터타입	DEFAULT 기본값,
    ...
);

 

제약조건 활성화 | 비활성화

-- 제약조건 활성화
ALTER TABLE 테이블명
ENABLE CONSTRAINT 제약조건명;

-- 제약조건 비활성화
ALTER TABLE 테이블명
DISABLE CONSTRAINT 제약조건명;

'ORACLE SQL' 카테고리의 다른 글

PL/SQL & 변수  (0) 2021.03.04
객체  (0) 2021.03.03
ORACLE 사용자 관리  (0) 2021.03.02
트랜잭션  (0) 2021.03.02
SUBQUERY  (0) 2021.03.01