본문 바로가기
BackEnd/Database

[DB] 무결성 제약조건(Constraint)

by ryuneng 2025. 1. 20.
반응형

# 목적

: 데이터베이스의 무결성 제약조건(Constraint) 정리




제약조건(Constraint) 이란?

: 데이터의 무결성을 지키기 위해 제한된 조건으로,
테이블에 유효하지 않은 데이터가 입력되는 것을 방지한다.




제약조건의 종류

1. NOT NULL

  • 해당 컬럼에 NULL값이 입력되지 못하도록 지정하는 제약조건
  • 사용예시)
CREATE TATBLE USERS (
        USER_NO,
        USER_ID        VARCHAR2(255) NOT NULL,  -- 필수 입력값
        USER_PASSWORD  VARCHAR2(255) NOT NULL,  -- 필수 입력값
        USER_NAME      VARCHAR2(255) NOT NULL,  -- 필수 입력값
        USER_EMAIL     VARCHAR2(255)         ,  -- 선택 입력값
        ...
)
-- USER_ID, USER_PASSWORD, USER_NAME은 NULL값 허용X



2. UNIQUE

  • 해당 컬럼의 값은 테이블 전체에서 고유한 값을 가지도록 지정하는 제약조건
  • NULL값 입력 가능
  • 사용예시)
CREATE TABLE USERS (
        USER_NO        NUMBER(10),
        USER_ID        VARCHAR2(255) UNIQUE,
        USER_PASSWORD  VARCHAR2(255)       ,
        USER_NAME      VARCHAR2(255)       ,
        USER_EMAIL     VARCHAR2(255) UNIQUE,
        ...
)
-- USER_ID, USER_EMAIL에 대해 동일한 값을 가지는 다른 행은 저장 불가



3. PRIMARY KEY

  • 테이블의 각 행을 고유하게 식별할 수 있는 값으로 지정하는 제약조건
  • 테이블 당 하나만 지정 가능
  • NULL값 입력 불가, 고유한 값을 가져야 함 (보통 시퀀스에서 획득한 일련번호 사용)
  • 사용예시)
CREATE TABLE USERS (
        USER_NO        NUMBER(10)    PRIMARY KEY,
        USER_ID        VARCHAR2(255),
        USER_PASSWORD  VARCHAR2(255),
        USER_NAME      VARCHAR2(255),
        USER_EMAIL     VARCHAR2(255),
        ...
)
-- USER_NO : USERS 테이블에서 행을 대표하는 컬럼



4. FOREIGN KEY

  • 다른 테이블 혹은 같은 테이블 특정 컬럼의 값과 관련된 값만 가지도록 지정하는 제약조건
  • 사용예시)
CREATE TABLE DEPARTMENTS (
        DEPT_NO        NUMBER(4)      PRIMARY KEY,
        DEPT_NAME      VARCHAR2(255)  NOT NULL,
        ...
)

CREATE TABLE EMPLOYEES (
        EMP_NO        NUMBER(4),
        EMP_NAME      VARCHAR2(255),
        DEPT_NO       NUMBER(4)       REFERENCES DEPARTMENTS(DEPT_NO) -- 직원의 소속 부서 번호
        ...
)

-- EMPLOYEES의 DEPT_NO 컬럼은 DEPARTMENTS의 DEPT_NO 컬럼의 값을 참조하는 컬럼
-- EMPLOYEES의 DEPT_NO 컬럼에는 이 컬럼이 참조하고 있는 컬럼이 가지고 있는 값만 허용됨
-- EMPLOYEES의 DEPT_NO 컬럼에 NOT NULL 제약조건이 적용되어 있지 않은 경우, NULL값 저장 가능
-- FOREIGN KEY 제약조건으로 참조되는 컬럼은 반드시 PRIMARY KEY 제약조건 혹은 UNIQUE 제약조건이 적용되어 있어야 함



5. CHECK

  • 제시된 조건식을 만족하는 값만 컬럼에 저장 가능하도록 지정하는 제약조건
  • 사용예시)
CREATE TABLE USERS (
        USER_ID,
        USER_NAME,
        USER_GENDER   CHAR(1)     CHECK (USER_GENDER IN ('F', 'M')),  -- 성별은 'F'나 'M'만 가능
        UESR_AGE      NUMBER(3)   CHECK (USER_AGE >= 1 AND USER_AGE < 150)
)




제약조건의 추가/삭제

1. 외래키 제약조건 추가하기

ALTER TABLE 테이블명
	ADD CONSTRAINT 제약조건별칭 FOREIGN KEY (컬럼명)
                              REFERENCES 부모테이블명 (컬럼명);

2. 제약조건 삭제하기

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건별칭;

3. 제약조건 비활성화하기

ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건별칭;

4. 제약조건 활성화하기

ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건별칭;

 


< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >

🔗 velog 버전 보기 : https://velog.io/@ryuneng2/DB-제약조건-constraint