DB/MSSQL
[MSSQL] 제약조건(CONSTRAINT)
Plone
2021. 1. 18. 16:31
UNIQUE 제약 조건 및 CHECK 제약 조건 - SQL Server
UNIQUE 제약 조건 및 CHECK 제약 조건
docs.microsoft.com
#제약조건(CONSTRAINT)
테이블에 부적절한 데이터가 입력되는 것을 방지하기 위한 여러규칙
NOT NULL : 데이터 입력 필수
UNIQUE : 데이터 중복 불가, 자동으로 인덱스 생성
CHECK : 컬럼 데이터를 제한함(< 100, IN(1,2,3))
DEFAULT : 데이터를 입력하지 않아도 기본으로 입력됨
PRIMARY KEY(기본키) : NOT NULL과 UNIQUE의 특성을 가짐
기본키는 행을 대표하는 컬럼 역할을 하며, 다른 테이블에서 외래키들이 참조할 수 있는 키로서 자격을 가짐
UNIQUE와 마찬가지로 기본키를 정의 하면 자동으로 인덱스가 생성된다
FOREIGN KEY(외래키) : 기본키를 참조하는 컬럼
외래키를 가지는 컬럼의 데이터형은 외래키가 참조하는 기본키의 데이터형과 일치해야한다
(일치하지 않을경우 참조무결성 제약에 의해 테이블 생성 불가)
외래키에 의해 참조되고 있는 기본키는 삭제할 수 없다
CREATE TABLE 테이블명(
COL1 VARCHAR(10),
COL2 VARCHAR(10),
COL3 VARCHAR(10),
COL4 VARCHAR(10) NOT NULL, --NULL을 허용하지 않음
COL5 VARCHAR(10) DEFAULT '0',
--기본키 설정
CONSTRAINT 이름 PRIMARY KEY CLUSTERED(COL1 ASC)
--고유키 설정
CONSTRAINT 이름 UNIQUE(COL2, COL3);
--외래키 설정
CONSTRAINT 이름 FOREIGN KEY (COL4) REFERENCES 참조할 테이블명 (COL1)
ON DELETE CASCADE -- 참조하고 있는 테이블의 데이터가 삭제되면 외래키로 설정한 컬럼의 데이터도 삭제됨
ON UPDATE CASCADE -- 참조하고 있는 테이블의 데이터가 변경되면 외래키로 설정한 컬럼의 데이터도 변경됨
--입력 데이터 검사
CONSTRAINT 이름 CHECK (COL1 > 1 AND COL1 < 100) --COL1에 들어가는 값이 1보다 크고 100보다 작은가
CONSTRAINT 이름 CHECK (COL5 IN ('0','1')) --COL5에는 0과 1만 들어갈 수 있다
);
아래처럼도 가능하다
CREATE TABLE 테이블명(
COL1 VARCHAR(10) PRIMARY KEY, --기본키 설정
COL2 VARCHAR(10) UNIQUE, --고유키 설정
COL3 VARCHAR(10) UNIQUE, --고유키 설정
COL4 VARCHAR(10) NOT NULL, --NULL을 허용하지 않음
COL5 VARCHAR(10) DEFAULT '0',
--외래키 설정
CONSTRAINT 이름 FOREIGN KEY (COL4) REFERENCES 참조할 테이블명 (COL1)
ON DELETE CASCADE -- 참조하고 있는 테이블의 데이터가 삭제되면 외래키로 설정한 컬럼의 데이터도 삭제됨
ON UPDATE CASCADE -- 참조하고 있는 테이블의 데이터가 변경되면 외래키로 설정한 컬럼의 데이터도 변경됨
--입력 데이터 검사
CONSTRAINT 이름 CHECK (COL1 > 1 AND COL1 < 100) --COL1에 들어가는 값이 1보다 크고 100보다 작은가
CONSTRAINT 이름 CHECK (COL5 IN ('0','1')) --COL5에는 0과 1만 들어갈 수 있다
);