슬기로운 개발생활

[MySQL] 제약 조건(constraint) 개념 및 종류

by coco3o
반응형

제약 조건(constraint)

제약조건(constraint)이란 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙을 의미한다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나 ALTER 문으로 컬럼을 추가할 때도 설정할 수 있다.

MySQL에서 사용할 수 있는 제약 조건은 다음과 같다.

1. NOT NULL
2. UNIQUE
3. PRIMARY KEY
4. FOREIGN KEY
5. DEFAULT


NOT NULL

NOT NULL 제약 조건을 설정하면, 해당 필드는 NULL 값을 저장할 수 없다.
즉, 이 제약 조건이 설정된 필드는 무조건 데이터를 가지고 있어야 한다.

문법

CREATE TABLE 테이블이름
(
    필드이름 필드타입 NOT NULL,
    ...
)


간단한 예

CREATE TABLE Test
(
    ID INT NOT NULL,
    Name VARCHAR(30),
    ReserveDate DATE,
    RoomNum INT
);

UNIQUE

UNIQUE 제약 조건을 설정하면, 해당 필드는 서로 다른 값을 가져야 한다.
즉, 이 제약 조건이 설정된 필드는 중복된 값을 저장할 수 없다.

문법

1. CREATE TABLE 테이블이름
(
    필드명 필드타입 UNIQUE,
    ...
)

2. CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...,
    [CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)

위의 두 문법은 모두 해당 필드에 UNIQUE 제약 조건을 설정한다.
두 번째 문법을 사용하면, 해당 제약 조건에 이름을 설정할 수 있다.

간단한 예

CREATE TABLE Test 
(
    ID INT UNIQUE,
    Name VARCHAR(30),
    ReserveDate DATE,
    RoomNum INT
);

PRIMARY KEY

PRIMARY KEY 제약 조건을 설정하면, 해당 필드는 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
따라서 이 제약조건이 설정된 필드는 NULL 값을 가질 수 없으며, 또한 중복된 값을 가질 수 없다.
이러한 PRIMARY KEY 제약 조건을 기본 키라고 한다.
테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 한다.

문법

1. CREATE TABLE 테이블이름
(
    필드이름 필드타입 PRIMARY KEY,
    ...
)

2. CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...,
    [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)
)



간단한 예

CREATE TABLE Test 
(
    ID INT PRIMARY KEY,
    Name VARCHAR(30),
    ReserveDate DATE,
    RoomNum INT
);

FOREIGN KEY

FOREIGN KEY 제약 조건을 설정한 필드를 외래 키라고 부르며, 한 테이블을 다른 테이블과 연결해주는 역할을 한다.
외래 키가 설정된 테이블에 레코드를 입력하면, 기준이 되는 테이블의 내용을 참조해서 레코드가 입력된다.
즉, FOREIGN KEY 제약 조건은 하나의 테이블을 다른 테이블에 의존하게 만든다.
FOREIGN KEY를 설정할 때 참조되는 테이블의 필드는 반드시 UNIQUE나 PRIMARY KEY가 설정되어 있어야 한다.

문법

CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...,
    [CONSTRAINT 제약조건이름]
    FOREIGN KEY (필드이름)
    REFERENCES 테이블이름 (필드이름)
)



간단한 예
Test2 테이블의 ParentID 필드에 Test1 테이블의 ID 필드를 참조하는 FOREIGN KEY 제약 조건을 설정하는 예이다.

CREATE TABLE Test2
(
    ID INT,
    ParentID INT,
    FOREIGN KEY (ParentID)
    REFERENCES Test1(ID) ON UPDATE CASCADE
);

1. ON DELETE
- 참조되는 테이블의 값이 삭제될 경우의 동작ON DELETE 구문으로 설정
2. ON UPDATE
- 참조되는 테이블의 값이 수정될 경우의 동작ON UPDATE 구문으로 설정

설정할 수 있는 동작은 아래와 같다.
1. CASCADE : 참조되는 테이블에서 데이터를 삭제하거나 수정하면 참조하는 테이블에서도 삭제와 수정이 같이 이루어짐

2. SET NULL : 참조되는 테이블에서 데이터를 삭제하거나 수정하면 참조하는 테이블의 데이터는 NULL로 변경

3. NO ACTION : 참조되는 테이블에서 데이터를 삭제하거나 수정하면 참조하는 테이블의 데이터는 변경되지 않음

4. SET DEFAULT : 참조되는 테이블에서 데이터를 삭제하거나 수정하면 참조하는 테이블의 데이터는 필드의 기본값으로 설정

5. RESTRICT : 참조하는 테이블에 데이터가 남아 있으면 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없음


DEFAULT

DEFAULT 제약 조건은 해당 필드의 기본값을 설정할 수 있게 해준다.
만약 레코드를 입력할 때 해당 필드 값을 전달하지 않으면, 자동으로 설정된 기본 값을 저장한다.

문법

CREATE TABLE 테이블이름
(
    필드이름 필드타입 DEFAULT 기본값,
    ...
)



간단한 예

CREATE TABLE Test
(
    ID INT,
    Name VARCHAR(30) DEFAULT 'Anonymous',
    ReserveDate DATE,
    RoomNum INT
);

참고

http://tcpschool.com/mysql/mysql_constraint_notNull




반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기