제약 조건
개념
데이터의 무결성을 지키기 위한 제한된 조건
특정한 데이터를 입력할 때 무조건 입력되는 것이 아니라
어떠한 조건을 만족했을 때에만 입력되도록 제한하는 것을 의미함
6가지 제약 조건
기본 키 (PRIMARY KEY) 제약 조건
PRIMARY KEY
테이블의 각 행들을 구분할 수 있는 식별자
- 중복될 수 없고, NULL값이 입력될 수 없음
- 기본키로 설정하면 자동으로 클러스터형 인덱스가 생성됨
- 기본 키는 하나의 열 또는 여러 개의 열을 합쳐 설정할 수 있으나,
한 개만 설정할 수 있음
# 예 1
CREATE TABLE userTbl
(
userID char(8) NOT NULL PRIMARY KEY,
name nvarchar(10) NOT NULL
)
# 예 2
CREATE TABLE userTbl
(
userID char(8) NOT NULL
CONSTRAINT PK_userID PRIMARY KEY,
name nvarchar(10) NOT NULL
)
# 기본 키 설정 방법
CREATE TABLE userTbl
(
userID char(8) NOT NULL
name nvarchar(10) NOT NULL
)
GO
ALTER TABLE userTbl
ADD CONSTRAINT PK_userTbl_userID
PRIMARY KEY(userID);
# 필요에 따라서 두 개 또는 그 이상을 합쳐서 하나의 기본키로 설정
ALTER TABLE prodTbl
ADD CONSTRAINT PK_prodTbl_proCode_prodID
PRIMARY KEY(prodCode, prodID);
외래 키 (FOREIGN KEY) 제약 조건
FOREIGN KEY
두 테이블 간의 관계를 선언함으로써 데이터의 무결성을 보장
- 외래 키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됨
- 외래 키 테이블에 데이터를 입력할 때는 꼭 기준 테이블을 참조해서 입력하므로,
기준 테이블에 이미 데이터가 존재해야만 함
CREATE TABLE userTbl
(
userID char(8) NOT NULL PRIMARY KEY,
name nvarchar(10) NOT NULL,
# ...생략
)
GO
CREATE TABLE buyTbl
(
num int IDENTITY(1,1) NOT NULL PRIMARY KEY,
userid char(8) NOT NULL
FOREIGN KEY REFERENCES userTbl(userID),
prodName nchar(6)
)
UNIQUE 제약 조건
UNIQUE
중복되지 않는 유일한 값을 입력
- Primary Key 제약 조건과 거의 비슷하며, 차이점은 NULL 값을 허용(단 1개만)한다는 것임
- 회원 테이블의 경우, 주로 email 주소를 UNIQUE로 설정하는 경우가 많음
CREATE TABLE userTbl(
userID nchar(8) NOT NULL PRIMARY KEY,
# ...생략
email nchar(30) NULL UNIQUE
)
CREATE TABLE userTbl(
userID nchar(8) NOT NULL PRIMARY KEY,
# ...생략
email nchar(30) NULL
CONSTRAINT AK_email UNIQUE
)
CHECK 제약 조건
CHECK
입력되는 데이터를 점검하는 기능
- Check 제약 조건이 설정되면 제약 조건에 위배되는 데이터는 입력이 불가함
- 출생연도가 1900년 이후이고, 현재 시간 이전이어야 하는 조건을 지정할 수 있음
ALTER TABLE userTbl
ADD CONSTRAINT CK_birthYear
CHECK(
birthYear >= 1900 AND
birthYear <= YEAR(GETDATE())
);
ALTER TABLE userTbl
ADD CONSTRAINT CK_mobile1
CHECK (
mobile1 IN (‘010’,‘011’,‘016’,‘017’,‘018’,‘019’)
);
DEFAULT 정의
정보
데이터 입력하지 않았을 때 자동으로 입력되는 값을 정의하는 방법
- 값이 직접 명기되면 DEFAULT로 설정된 값은 무시함
- 출생연도를 입력하지 않으면 그냥 현재의 연도를 입력하고, 주소를 특별히 입력하지 않았다면 '서울'이 입력되도록 함
CREATE TABLE userTbl (
userId nchar(8) NOT NULL PRIMARY KEY,
name nvarchar(10) NOT NULL,
birthYear int NOT NULL DEFAULT YEAR(GETDATE()), # 현재년도
addr nchar(4) NOT NULL DEFAULT '서울',
# ...생략
)
# DEFAULT 문은 DEFAULT로 설정된 값을 자동 입력
INSERT INTO userTbl VALUES(
"LHL", N"이승딱", default, default, # ~~~
);
# 열이름이 명시되지 않으면 DEFAULT로 설정된 값을 자동 입력
INSERT INTO userTbl (userID, name)
VALUES("LST", N"이승딱");