제약조건
•
제약조건(constraint)이란 데이터의 무결성을 지키기 위해 데이터를 입력 받을 때 실행되는 검사 규칙을 의미합니다.
•
이러한 제약 조건은 CREATE문으로 테이블을 생성할 때나 ALTER문으로 필드를 추가할 때도 설정할 수 있습니다.
NOT NULL
-- CREATE문으로 NOT NULL 설정
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입] NOT NULL
);
-- ALTER문으로 NOT NULL 설정
ALTER TABLE [테이블이름]
ADD [컬럼이름] [컬럼타입] NOT NULL; -- 새로운 컬럼 추가
ALTER TABLE [테이블이름]
MODIFY [컬럼이름] [컬럼타입] NOT NULL; -- 기존 컬럼 변경
SQL
복사
•
NULL 비허용, 중복 허용
UNIQUE
-- CREATE문으로 UNIQUE 설정
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럽타입] UNIQUE
);
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
UNIQUE ([컬럼이름])
);
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
...,
CONSTRAINT [제약조건이름] UNIQUE ([컬럼이름])
);
-- ALTER문으로 UNIQUE 설정
ALTER TABLE [테이블이름]
ADD UNIQUE ([컬럼이름]);
ALTER TABLE [테이블이름]
ADD CONSTRAINT [제약조건이름] UNIQUE ([컬럼이름]);
SQL
복사
•
NULL 허용, 중복 비허용
•
UNIQUE 제약조건을 설정하면 해당 필드는 자동으로 보조 인덱스(INDEX)로 만들어집니다.
•
만약 제약조건에 이름을 설정하면 ALTER-DROP문을 이용해 해당 제약조건을 삭제할 수 있습니다.
PRIMARY KEY
-- CREATE문으로 PRIMARY KEY 설정
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럽타입] PRIMARY KEY
);
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
PRIMARY KEY ([컬럼이름])
);
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
...,
CONSTRAINT [제약조건이름] PRIMARY KEY ([컬럼이름])
);
-- ALTER문으로 PRIMARY KEY 설정
ALTER TABLE [테이블이름]
ADD PRIMARY KEY ([컬럼이름]);
ALTER TABLE [테이블이름]
ADD CONSTRAINT [제약조건이름] PRIMARY KEY ([컬럼이름]);
-- 기본키 삭제ALTER TABLE [테이블이름]
DROP PRIMARY KEY;
SQL
복사
•
NULL 비허용, 중복 비허용, 테이블당 하나
•
NOT NULL과 UNIQUE의 특징을 모두 가지고 테이블 당 오직 하나의 컬럼에만 설정할 수 있습니다.
•
테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 합니다.
FOREIGN KEY
-- CREATE문으로 FOREIGN KEY 설정
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
...,
CONSTRAINT [제약조건이름] FOREIGN KEY [컬럼이름] REFERENCES [테이블이름2(컬럼이름)
);
-- ALTER문으로 FOREIGN KEY 설정
ALTER TABLE [자식 테이블이름]
ADD CONSTRAINT [제약조건이름] FOREIGN KEY [자식 기본키] REFERENCES [부모 테이블이름(부모 기본키)]
ON UPDATE [동작]
ON DELETE [동작];
-- 외래키 삭제
ALTER TABLE [자식 테이블이름]
DROP FOREIGN KEY [자식 외래키];
SQL
복사
•
한 테이블을 다른 테이블과 연결해주는 역할을 합니다.
•
FOREIGN KEY를 설정하려는 컬럼은 UNIQUE나 PRIMARY KEY가 설정되어 있어야 합니다.
ON DELETE / ON UPDATE
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입],
...,
FOREIGN KEY [컬럼이름] REFERENCES [테이블이름2(컬럼이름)]
ON UPDATE [동작]
ON DELETE [동작]
);
SQL
복사
•
FOREIGN KEY에 의해 참조되는 테이블에서 데이터의 수정/삭제가 발생하면 참조하고 있는 테이블의 데이터도 같이 영향을 받습니다.
•
이 때 참조하고 있는 테이블의 동작은 다음 키워드를 사용하여 미리 설정할 수 있습니다.
◦
ON DELETE : 참조되는 테이블의 값이 삭제될 경우의 동작
◦
ON UPDATE : 참조되는 테이블의 값이 수정될 경우의 동작
•
설정할 수 있는 동작
◦
CASCADE : 참조하는 테이블에서도 데이터의 삭제와 수정이 같이 이루어집니다.
◦
SET NULL : 참조하는 테이블의 데이터가 NULL로 변경됩니다.
◦
NO ACTION : 참조하는 테이블의 데이터가 변경되지 않습니다.
◦
SET DEFAULT : 참조하는 테이블의 데이터는 컬럼의 기본값으로 설정됩니다.
◦
RESTRICT : 참조하는 테이블에 데이터가 남아 있으면 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.
DEFAULT
-- CREATE문에서 DEFAULT 설정
CREATE TABLE [테이블이름] (
[컬럼이름] [컬럼타입] DEFAULT [기본값]
);
-- ALTER문에서 DEFAULT 설정
ALTER TABLE [테이블이름]
ADD or MODIFY [컬럼이름] [컬럼타입] DEFAULT [기본값];
ALTER TABLE [테이블이름]
ALTER [컬럼이름] SET DEFAULT [기본값];
SQL
복사
•
데이터를 추가할 때 해당 컬럼 값을 전달하지 않으면 자동으로 설정된 기본값을 저장하도록 설정합니다.