Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server CHECK 제약 조건 완벽 가이드: 생성부터 삭제·활성화까지

SQL Server의 CHECK 제약 조건(Check Constraint)이 무엇인지, 어떤 용도로 사용되는지 궁금하신가요? 이 글에서는 SQL Server(Transact-SQL) 환경에서 CHECK 제약 조건을 정의하고 활용하는 방법을 예제와 함께 자세히 살펴봅니다.

SQL Server의 CHECK 제약 조건이란?

SQL Server(Transact-SQL)의 CHECK 제약 조건은 테이블의 각 행(row)에 저장되는 값이 반드시 만족해야 하는 조건을 정의하는 기능입니다. 데이터가 INSERT 또는 UPDATE될 때마다 조건이 자동으로 검사되므로, 잘못된 데이터의 입력을 사전에 차단하고 데이터 무결성을 지키는 데 매우 유용합니다.

CHECK 제약 조건 사용 시 주의 사항

  1. CHECK 제약 조건은 SQL 뷰(View)에는 정의할 수 없습니다.
  2. 테이블의 CHECK 제약 조건은 반드시 해당 테이블의 컬럼만 참조할 수 있으며, 다른 테이블의 컬럼은 참조할 수 없습니다.
  3. CHECK 제약 조건에는 서브쿼리(Subquery)를 사용할 수 없습니다.
  4. CHECK 제약 조건은 CREATE TABLE 또는 ALTER TABLE 명령으로 정의할 수 있습니다.

CREATE TABLE로 CHECK 제약 조건 생성하기

문법

CREATE TABLE 테이블명
(
  컬럼1 데이터타입 [ NULL | NOT NULL ],
  컬럼2 데이터타입 [ NULL | NOT NULL ],
  ...

  CONSTRAINT 제약조건명
  CHECK [ NOT FOR REPLICATION ] (조건식)
);

매개변수 설명

  • 테이블명: CHECK 제약 조건을 생성하려는 테이블의 이름입니다.
  • 제약조건명: CHECK 제약 조건에 부여할 이름입니다.
  • 컬럼명: 제약 조건이 적용될 테이블의 컬럼입니다.
  • 조건식: 모든 행이 반드시 만족해야 하는 조건입니다.

예제 1

CREATE TABLE nhanvien   -- 직원 테이블
(
  id_nhanvien INT NOT NULL,
  ho VARCHAR(50) NOT NULL,
  ten VARCHAR(50),
  luong MONEY,
  CONSTRAINT id_nhanvien_kiemtra
    CHECK (id_nhanvien BETWEEN 1 AND 10000)
);

위 예제에서 CREATE TABLE 문은 nhanvien(직원) 테이블에 id_nhanvien_kiemtra라는 이름의 CHECK 제약 조건을 생성합니다. 이 제약 조건은 id_nhanvien(사번) 필드의 값이 항상 1 이상 10,000 이하 범위 안에 있어야 함을 보장합니다.

예제 2

CREATE TABLE nhanvien
(
  id_nhanvien INT NOT NULL,
  ho VARCHAR(50) NOT NULL,
  ten VARCHAR(50),
  luong MONEY,
  CONSTRAINT luong_kiemtra
    CHECK (luong > 0)
);

이 예제는 luong_kiemtra라는 CHECK 제약 조건을 생성하여, 급여(luong) 값이 항상 0보다 크도록 보장합니다.

ALTER TABLE로 CHECK 제약 조건 추가하기

이미 존재하는 테이블에 CHECK 제약 조건을 추가하려면 ALTER TABLE 명령을 사용합니다.

문법

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명
CHECK (조건식);

매개변수 설명

  • 테이블명: CHECK 제약 조건을 추가하려는 테이블의 이름입니다.
  • 제약조건명: CHECK 제약 조건에 부여할 이름입니다.
  • 컬럼명: 제약 조건이 적용될 테이블의 컬럼입니다.
  • 조건식: 제약 조건이 검사할 조건입니다.

예제

ALTER TABLE nhanvien
ADD CONSTRAINT ho_kiemtra
CHECK (ho IN ('Smith', 'Anderson', 'Jonas'));

이 명령은 이미 존재하는 nhanvien 테이블에 ho_kiemtra라는 CHECK 제약 조건을 생성하여, 직원의 성(ho)이 반드시 'Smith', 'Anderson', 'Jonas' 중 하나의 값만 가질 수 있도록 제한합니다.

CHECK 제약 조건 삭제하기

문법

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

매개변수 설명

  • 테이블명: CHECK 제약 조건을 삭제하려는 테이블의 이름입니다.
  • 제약조건명: 삭제하려는 CHECK 제약 조건의 이름입니다.

예제

ALTER TABLE nhanvien
DROP CONSTRAINT ho_kiemtra;

이 명령은 nhanvien 테이블에서 ho_kiemtra 제약 조건을 삭제합니다.

CHECK 제약 조건 활성화하기

일시적으로 비활성화했던 CHECK 제약 조건을 다시 활성화하려면 WITH CHECK 옵션을 사용합니다.

문법

ALTER TABLE 테이블명
WITH CHECK CHECK CONSTRAINT 제약조건명;

매개변수 설명

  • 테이블명: CHECK 제약 조건을 다시 활성화하려는 테이블의 이름입니다.
  • 제약조건명: 활성화하려는 CHECK 제약 조건의 이름입니다.

예제

ALTER TABLE nhanvien
WITH CHECK CHECK CONSTRAINT luong_kiemtra;

이 예제는 nhanvien 테이블의 luong_kiemtra CHECK 제약 조건을 다시 활성화합니다.

CHECK 제약 조건 비활성화하기

대량의 데이터를 입력하는 작업 등에서 일시적으로 제약 조건 검사를 건너뛰고 싶다면 NOCHECK 옵션으로 제약 조건을 비활성화할 수 있습니다.

문법

ALTER TABLE 테이블명
NOCHECK CONSTRAINT 제약조건명;

매개변수 설명

  • 테이블명: CHECK 제약 조건을 비활성화하려는 테이블의 이름입니다.
  • 제약조건명: 비활성화하려는 CHECK 제약 조건의 이름입니다.

예제

ALTER TABLE nhanvien
NOCHECK CONSTRAINT luong_kiemtra;

이 예제는 nhanvien 테이블의 luong_kiemtra CHECK 제약 조건을 비활성화합니다.

마무리

CHECK 제약 조건은 잘못된 데이터의 입력을 데이터베이스 차원에서 차단하는 강력한 도구입니다. CREATE TABLE로 테이블을 생성할 때 정의하거나, ALTER TABLE로 기존 테이블에 추가할 수 있으며, 필요에 따라 NOCHECK / WITH CHECK 옵션으로 비활성화와 활성화를 자유롭게 전환할 수 있습니다. 데이터 무결성이 중요한 테이블이라면 미리 적절한 CHECK 제약 조건을 설계해 두는 것이 좋습니다.