본문 바로가기
DataBase/MsSql

MSSQL CHECK 제약 조건 생성, 확인, 삭제 및 특징

by 아우럼 2024. 3. 14.
반응형

CHECK 제약조건은 data를 입력하였을 때 해당 값이 CHECK 조건에 맞는지 확인하여 입력한 data에 대해서 true면 입력하고 false면 거부할 수 있는 제약조건입니다.

Check 제약조건의 특징

  • MSSQL 제약조건 중에서 CHECK에는 특정 column의 입력 가능한 값의 범위를 지정할 때 사용한다.
  • 만약 하나의 column에 CHECK 제약조건을 설정한다면, 그 column은 특정한 범위 안에서의 값만 입력할 수 있습니다.
  • 그럼, 하나의 테이블에서 CHECK 제약조건을 설정했다면, 그 레코드의 특정 column을 기반으로 다른 column의 값을 연관해서 제한할 수도 있다.

CHECK 제약조건 추가

TABLE 생성하면서 column에 자동으로 Check 제약조건 설정.

  • table 생성하면서 column, datatype 이후 check 예약어 뒤에 제약조건을 추가할 수 있습니다.
  • check 제약조건은 자주 사용하지 않지만 column값의 범위를 지정할 때는 사용할 수 있습니다.
-- 예시코드.
CREATE TABLE [테이블명] (
      [column1] [dataType],
      [column2] [dataType] CHECK ([조건절])
   );


-- 1. TABLE 생성하면서 column에 자동으로 CHECK 설정. 
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForCheck;
CREATE TABLE UserInfoForCheck (
    UserId int,
    UserName varchar(255),
    UserAge  int CHECK (UserAge > 20 and UserAge < 65)    
);

-- CHECK 제약조건이 잘되는지 확인.
insert into UserInfoForCheck(UserId,UserName,UserAge)
values(202401,'john',10);

 

  • table 생성하면서 check 제약조건 생성하는 방법 소스코드 및 예제입니다.

CHECK 제약 조건이 잘되는지 check 범위를 벗어나는 값 입력 합니다.

두 개 이상의 column을 사용하여 CHECK 제약조건 생성.

  • table 생성 시 column을 먼저 선언한 후 constraint을 통해서 여러 칼럼에 check 제약조건을 생성합니다.
  • check 제약조건명을 입력하고 칼럼이름을 이용하여 조건을 넣어주세요.
  • check 제약조건 sytax 및 소스코드를 확인 후 실습해 보세요.
-- 예시코드.
CREATE TABLE [테이블명] (
    [column1] [dataType],
    [column2] [dataType],
    [column3] [dataType],
CONSTRAINT [check제약조건명] CHECK([조건절]) 
);

-- 2. 두개 이상의 column을 사용하여 CHECK 제약조건 생성.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForCheck;
CREATE TABLE UserInfoForCheck (
    UserId int,
    UserName varchar(255),
    UserFirstName  varchar(255),
	UserAge  int,
	CONSTRAINT Ck_UserInfoForCheck CHECK(UserAge > 10 and UserFirstName = 'john')  
);

 

기존 column에 CHECK 제약조건 생성.

  • table 생성한 이후에도 check제약 조건을 생성할 수 있습니다.
  • alter 명령어와 check 예약어를 이용하여 기존 table에 check 제약조건을 추가해 보세요.
  • 밑에 소스를 확인 후 실습을 해보세요.
-- 예시코드.
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] CHECK ([조건걸]);

-- 3. 기존 column에 CHECK 제약조건 생성
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForCheck;
CREATE TABLE UserInfoForCheck (
    UserId int,
    UserName varchar(255),
    UserFirstName  varchar(255),
    UserAge  int 
);
go
ALTER TABLE UserInfoForCheck  ADD CONSTRAINT Ck_UserInfoForCheck CHECK(UserAge > 10 and UserFirstName = 'john') ;

 

신규 column 추가 시 CHECK 제약조건 추가.

  • 기존 table에 column을 추가하면서 check 제약조건을 추가하는 방법입니다.
  • alter 명령어를 이용하여 column 추가, check 조건을 넣어보세요.
  • 밑에 소스코드를 보시고 check 제약조건을 실습해 보세요.
--예시코드.
ALTER TABLE [테이블명] ADD [column1] [dataType] CONSTRAINT [check제약조건명] CHECK ([조건절]);

-- 4. 신규 컬럼을 추가시 check 설정 예시.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForCheck;
CREATE TABLE UserInfoForCheck (
    UserId int,
    UserName varchar(255) 
);
go

ALTER TABLE UserInfoForCheck ADD UserAge int  CONSTRAINT Ck_UserInfoForCheck CHECK(UserAge > 10);

 

CHECK 제약조건 생성 확인 방법

  • EXEC SP_HELP [테이블명]으로 확인 가능합니다.
  • system view는 sys.check_constraints에서 확인 가능합니다.
  • 두 가지 조건으로 check 제약조건을 확인하고 실습해 보세요.
-- CHECK 제약 조건 생성 확인(exec 명령어)
EXEC sp_help  UserInfoForCheck;
GO
-- CHECK 제약 조건 생성 확인(check_constraints) 
select schema_name(t.schema_id) + '.' + t.[name] as table_nm
	 ,col.[name] as column_nm
	 ,con.[name] as constraint_nm 
	 ,con.[definition] as df_value
from sys.check_constraints  con
left outer join sys.objects t
on con.parent_object_id = t.object_id
left outer join sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id 
order by con.name;

 

CHECK 제약 조건 생성 확인하는 여러 방법.

생성된 CHECK 제약조건 삭제

  • check 제약조건을 생성했으면 drop도 가능합니다.
  • check제약조건 삭제는 check 제약 조건명은 필수 이므로 제약조건 확인 부분을 활용 후 가능 합니다.
  • check 제약조건 sytax와 소스코드를 이용하여 실습해 주세요.
ALTER TABLE [테이블명] DROP CONSTRAINT [check제약조건명];

-- 생성된 CHECK 제약조건 삭제
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForCheck;
CREATE TABLE UserInfoForCheck (
    UserId int,
    UserName varchar(255),
    UserFirstName  varchar(255),
	UserAge  int,
	CONSTRAINT Ck_UserInfoForCheck CHECK(UserAge > 10 and UserFirstName = 'john')  
);

ALTER TABLE UserInfoForCheck  DROP CONSTRAINT Ck_UserInfoForCheck;

 

Check 제약조건 마무리

  • Check 제약조건은 실무에서는 자주 사용하지 않습니다.
  • database 운영시 잘못된 data가 주기적으로 입력돼서 문제가 발생하면 check 제약조건을 넣어서 문제를 해결할 수 있습니다.
반응형