본문 바로가기

DB/PostgreSQL

[ PostgreSQL ] CHECK - 데이터 추가 시 Column 값 확인하기

반응형

CHECK 제약 조건은 PostgreSQL에서 특정 컬럼의 값이 특정 조건을 충족하는지 확인하는 데 사용됩니다. 테이블에 데이터를 삽입하거나 수정할 때 CHECK 조건이 참인지 검증하며, 조건을 만족하지 않으면 에러가 발생해 데이터가 테이블에 반영되지 않습니다.

1. CHECK 사용법

테이블을 생성할 때 CHECK 제약 조건을 사용할 수 있으며, CREATE TABLE 구문에 직접 추가하거나 나중에 ALTER TABLE을 통해 추가할 수 있습니다.

CREATE TABLE 테이블_이름 (
    컬럼_이름 데이터_타입 CHECK (조건식)
);

또는 여러 컬럼을 대상으로 하는 제약 조건을 만들 수 있습니다.

2. 예제

employees 테이블에서 다음과 같은 CHECK 제약 조건을 설정한다고 가정해 보겠습니다.

  1. age 컬럼은 18세 이상이어야 합니다.
  2. salary 컬럼은 0 이상의 값을 가져야 합니다.
  3. department 컬럼은 'HR', 'Sales', 'IT' 중 하나여야 합니다.
CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT CHECK (age >= 18),  -- age는 18 이상이어야 함
    salary NUMERIC CHECK (salary >= 0),  -- salary는 0 이상이어야 함
    department VARCHAR(20) CHECK (department IN ('HR', 'Sales', 'IT'))  -- department는 지정된 목록에 속해야 함
);

3. 예제 설명

  1. age가 18 미만인 경우, 삽입 또는 업데이트가 실패합니다.
  2. salary가 0 미만인 경우, 삽입 또는 업데이트가 실패합니다.
  3. department가 'HR', 'Sales', 'IT' 중 하나가 아니면 삽입 또는 업데이트가 실패합니다.

4. 예제 데이터 삽입

위의 테이블을 기준으로, 조건을 충족하는 데이터와 그렇지 않은 데이터를 삽입해보겠습니다.

  1. 조건을 충족하는 데이터:이 데이터는 age, salary, department가 모두 CHECK 조건을 만족하므로 정상적으로 삽입됩니다.
  2. INSERT INTO employees (name, age, salary, department) VALUES ('Alice', 25, 50000, 'HR');
  3. 조건을 충족하지 않는 데이터:
    • 여기서 age가 18 미만이고, department가 허용된 값 중 하나가 아니므로 오류가 발생합니다.
  4. INSERT INTO employees (name, age, salary, department) VALUES ('Bob', 17, 40000, 'Finance');

5. 기존 테이블에 CHECK 제약 추가하기

이미 생성된 테이블에 CHECK 제약 조건을 추가하려면 ALTER TABLE 구문을 사용합니다.

ALTER TABLE employees
ADD CHECK (salary >= 30000);  -- salary는 30000 이상이어야 함

6. 주의사항

  • CHECK 조건은 단일 컬럼뿐만 아니라 여러 컬럼을 조합해 설정할 수도 있습니다.
  • 조건이 복잡해질수록 데이터 검증 속도에 영향을 줄 수 있으므로, 성능을 고려하여 설계하는 것이 좋습니다.

이렇게 CHECK 제약 조건을 사용하면 데이터의 무결성을 유지하면서 유효한 값만 테이블에 저장되도록 할 수 있습니다.

반응형