데이터 무결성을 지키는 주요 수단 중의 하나가 제약조건(Constraints)이다.

이러한 제약조건들은 테이블 스키마(Schema)를 생성할 때 컬럼에 명시해주는 방법과, 이미 테이블이 생성된 후에 새로이 제약조건을 생성해 주는 두가지 방법이 있다.

이중 후자의 방법으로 제약조건을 좀더 명시적으로 생성시키는 것이 관리하기에도 편리하다.

 

제약조건

범위

적용

가능한 수

NO CHECK

 Default

 도메인 제약

 INSERT

 1개

 X

 Check

 도메인 제약

 INSERT

 UPDATE

 N개

 O

 Primary Key

 개체 제약

 INSERT

 UPDATE

 1개

 X

 Unique

 개체 제약

 INSERT

 UPDATE  

 N개

 X

 Foreign Key

 참조 제약

 INSERT

 UPDATE

 N개

 O

 Trigger

 참조 제약

 INSERT

 UPDATE

 DELETE

 N개

 X

 

CREATE TABLE TB_Member(
       [user_code]     int     IDENTITY(1,1)
     , [user_name]     varchar(100)     NOT NULL
     , [user_level]     tinyint     NOT NULL     CHECK (user_level <= 10)
     , regdate     GETDATE()     DEFAULT (GETDATE())
     , CONSTRAINT [PK_user_code] PRIMARY KEY CLUSTERED ([user_code])
);

일단 테이블이 생성된 이후에는 ALTER TABLE문을 이용하여 제약조건을 추가하거나 삭제할 수 있다.

-- 제약조건 삭제
ALTER TABLE TB_Member
DROP CONSTRAINT [PK_user_code]
GO
 
-- 제약조건 추가
ALTER TABLE TB_Member
ADD CONSTAINT [PK_user_code]
PRIMARY KEY CLUSTERED ([user_code])
GO

ALTER TABLE 제약조건 추가시

ALTER TABLE로 제약조건을 추가할때 제약명을 명시하지 않으면 SQL 서버에서는 'PK_TB_Member_3E59FC87' 처럼 임의의 일련번호를 붙여 제약명을 생성하게 되므로 사후 관리가 불편해지므로 생성시 적절한 제약명을 사용하기를 권장한다.

 

디폴트 값에 지정할 수 있는 값

일반적인 상수, 스칼라 함수 그리고 무항함수(Niladic Function)들이 있다.

무항 함수에는 CURRENT_TIMESTAMP, CURRENT_USER, SESSION_USER, SYSTEM_USER, USER, USER_NAME과 같이 데이터에 대한 상세 기록을 남길 수 있는 기능들을 제공하고 있다.