제약 조건(constraint)
•
데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙을 의미
•
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나 ALTER 문으로 컬럼을 추가할 때도 설정할 수 있음.
NOT NULL
•
해당 필드는 NULL 값을 저장할 수 없다.
•
해당 제약 조건이 설정된 필드는 무조건 데이터를 소유하고 있어야 한다.
문법
CREATE TABLE 테이블이름
(
필드이름 필드타입 NOT NULL,
...
)
SQL
복사
간단한 예
CREATE TABLE Test
(
ID INT NOT NULL,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
SQL
복사
UNIQUE
•
해당 필드는 서로 다른 값을 가져야 한다. (유니크함)
•
해당 제약 조건이 설정된 필드는 중복된 값을 저장할 수 없다.
문법
CREATE TABLE 테이블이름
(
필드명 필드타입 UNIQUE,
...
)
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)
SQL
복사
간단한 예
CREATE TABLE Test
(
ID INT UNIQUE,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
SQL
복사
PRIMARY KEY (기본 키)
•
기본 키
•
해당 필드는 NOT NULL과 UNIQUE 제약 조건 특징을 모두 가진다.
•
해당 제약 조건이 설정된 필드는 NULL값 및 중복된 값을 가질 수 없다.
문법
CREATE TABLE 테이블이름
(
필드명 필드타입 UNIQUE,
...
)
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)
SQL
복사
간단한 예
CREATE TABLE Test (
ID INT PRIMARY KEY,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
SQL
복사
FOREIGN KEY (외래 키)
•
한 테이블을 다른 테이블과 연결해주는 역할
•
해당 필드는 하나의 테이블을 다른 테이블에 의존하게 만든다.
•
해당 제약 조건이 설정된 테이블에 레코드를 입력하면, 기준이 되는 테이블의 내용을 참조해서 레코드가 입력된다.
•
해당 키를 설정할 때 참조되는 테이블의 필드는 반드시 UNIQUE나 PRIMARY KEY가 설정되어 있어야 한다.
문법
CREATE TABLE 테이블이름(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
)
SQL
복사
간단한 예
CREATE TABLE Test2(
ID INT,
ParentID INT,
FOREIGN KEY (ParentID)
REFERENCES Test1(ID) ON UPDATE CASCADE
);
SQL
복사
구문
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
•
해당 필드의 기본값으로 설정하게 해준다.
•
레코드를 입력할 때 해당 필드 값을 전달하지 않으면, 자동으로 설정된 기본 값을 저장
문법
CREATE TABLE 테이블이름
(
필드이름 필드타입 DEFAULT 기본값,
...
)
SQL
복사
간단한 예
CREATE TABLE Test
(
ID INT,
Name VARCHAR(30) DEFAULT 'Anonymous',
ReserveDate DATE,
RoomNum INT
);
SQL
복사