데이터 무결성을 지키는 주요 수단 중의 하나가 제약조건(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과 같이 데이터에 대한 상세 기록을 남길 수 있는 기능들을 제공하고 있다.