본문으로 건너뛰기

제약 조건

개념

데이터의 무결성을 지키기 위한 제한된 조건

특정한 데이터를 입력할 때 무조건 입력되는 것이 아니라
어떠한 조건을 만족했을 때에만 입력되도록 제한하는 것을 의미함

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"이승딱");

NULL 값 허용

NULL 값

'아무 것도 없다'라는 의미

  • NULL 값을 허용하려면 NULL을, 허용하지 않으려면 NOT NULL을 사용함
  • Primary Key의 경우 생략하려면 자동으로 NOT NULL이 됨
위험

NULL 값은 공백(' ')이나 0과는 의미가 다름