제약조건(Contraint)란 데이터의 무결성을 지키기 위한 제한된 조건을 의미합니다. 특정 데이터를 입력할 때 무조건 입력되는 것이 아니라 어떠한 조건을 만족했을 때에만 입력되도록 제약하는 것을 말합니다.
1. Primary key 제약조건
기본키는 테이블 내에서 행을 구분할 수 있는 식별자입니다. 기본키 속성이 부여된 컬럼에 입력되는 값은 중복될 수 없으며, Null 값이 입력될 수도 없습니다. 대부분의 테이블은 기본키를 가져야 합니다. 물론, 기본키가 없어도 테이블을 구성하는 것이 가능하지만 모든 테이블에는 기본키를 설정해줘야 합니다. 기본키는 테이블에서 중요한 의미를 갖습니다. 우선 기본키로 생성한 열에는 자동으로 클러스터형 인덱스가 생성됩니다. 또한 테이블 내에서 하나의 열에만 기본키를 설정할 수도 있고, 두 개의 열을 합쳐 기본키로 설정할 수도 있습니다. 기본키 선언은 다음 예제와 같습니다.
(
USERID NCHAR(8) NOT NULL PRIMARY KEY,
NAME VARCHAR(10) NOT NULL
)
이 때 제약조건에 이름을 부여할 수 있는데 부여하지 않는다면 SQL Server가 알아서 제약조건의 이름을 설정해줍니다. 하지만 자동으로 설정되는 이름은 알아보기 힘들기 때문에 이름을 부여하는 것이 좋습니다.
(
USERID NCHAR(8) NOT NULL CONSTRAINT PK_USERID PRIMARY KEY,
NAME VARCHAR(10) NOT NULL
)
만약 테이블의 제약조건 및 정보를 확인하기 위해서는 sp_help 프로시저를 사용하면 됩니다.
2. Foreign key 제약 조건
외래키 제약조건은 두 테이블 간의 관계를 선언함으로써 데이터 무결성을 보장해주는 역할을 합니다. 외래키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됩니다. 외래키를 정의하는 테이블을 외래키 테이블이라 부르고 외래키에 의해 참조되는 테이블을 기준 테이블이라 부릅니다.
기준 테이블
(
USERID NCHAR(8) NOT NULL PRIMARY KEY
)
외래키 테이블
(
NUM INT NOT NULL PRIMARY KEY,
USERID NCHAR(8) NOT NULL FOREIGN KEY REFERENCES USER(USERID)
)
외래키 테이블에서 기준 테이블을 참조할 때는 기준 테이블에서 참조하는 열이 기본키로 설정되어 있음을 확인할 수 있습니다. 만약 기준 테이블이 primary key 또는 unique가 아니라면 외래키 관계를 설정되지 않습니다.
외개키 옵션 중에 ON DELETE CASCADE 와 ON UPDATE CASCADE 옵션이 있는데 이는 기준 테이블의 데이터가 변경되었을 때 외래키 테이블도 자동으로 적용되도록 설정해주는 것입니다.
(
NUM INT NOT NULL PRIMARY KEY,
USERID NCHAR(8) NOT NULL FOREIGN KEY REFERENCES USER(USERID) ON UPDATE CASCADE
)
이 옵션은 별도로 지정하지 않으면 on UPDATE NO ACTION과 on DELETE NO ACTION을 지정한 것과 동일합니다.
3.Unique 제약조건
unique 제약조건은 중복되지 않는 유일한 값을 입력해야 하는 조건입니다. 이것은 primary key와 거의 비슷하지만 unique는 기본키와 달리 null값을 허용합니다. 단 null 값은 단 한개만 하용됩니다. null 값이 두 개라면 유일하지 않게 되기 때문입니다.
(
USERID NCHAR(8) NOT NULL PRIMARY KEY,EMAIL NCHAR(30) UNIQUE
)
4. CHEKC 제약 조건
CHECK 제약조건은 입력되는 데이터를 점검하는 기능을 수행합니다.
범위 비교
인자 비교
또한 WITH CHECK 와 WITH NOCHECK 옵션이 있는데 이는 기존에 입력된 데이터가 CHECK 제약조건에 맞지 않았을 경우에 어떻게 할 것인지 결정해 줍니다.
5. default 제약조건
default 제약조건은 데이터를 입력하지 않았을 때 자동으로 입력되는 디폴트 값을 정의하는 방법입니다. 예를 들어 출생션도를 입력하지 않으면 그냥 현재 연도를 입력하고, 주소를 특별히 입력하지 않았다면 '서울'을 입력하게 할 수 있습니다.
(
USERID NCHAR(8) NOT NULL PRIMARY KEY,
BIRTHYEAR INT NOT NUL DEFAULT YEAR(GETDATE())
ADDRESS NCHAR(4) NOT NULL DEFAULT '서울'
)
[참조] 한빛미디어, 뇌를 자극하는 SQL Server 2005, 우재남
'MSSQL 2008 > MSSQL SQL' 카테고리의 다른 글
SQL - CASE...END 분기문 (0) | 2011.03.14 |
---|---|
SQL - IF...ELSE 분기문 (0) | 2011.03.14 |
SQL - 임시뷰 생성 구문 (WITH ~ AS 문) (0) | 2011.03.14 |
SQL - 데이터 형식 (0) | 2011.03.14 |
SQL - 테이블 구조 수정 쿼리문(ALTER TABLE) (0) | 2011.02.23 |