DevOps:leehi9817

SQL 무결성 제약조건(NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK) 본문

백엔드 개발/SQL

SQL 무결성 제약조건(NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK)

leehi9817 2021. 12. 8. 21:41

제약 조건

데이터 무결성

  • NOT NULL: NULL값 허용하지 않음
  • UNIQUE: 하나의 테이블에서 한번만 나옴 (주로 대체키 설정 시 사용됨)
  • PRIMARY KEY: 기본키 (UNIQUE + NOT NULL)
  • FOREIGN KEY: 외래키
  • CHECK: 도메인 무결성

 

참조 무결성 제약조건 (FOREIGN KEY)

외래키 값은 다른 테이블의 기본키 값들 중 하나이어야 함

속성명 [CONSTRAINT 제약조건명] REFERENCES 참조테이블명(속성명)

예시)

#customer 테이블의 id를 참조하는 외래키인 id
id varchar(20) CONSTRAINT FK_id REFERENCES customer(id)

 

도메인 무결성 제약조건(CHECK 제약 조건)

입력 값을 제한하는 제약 조건임

예시)

#birthYear 값을 1900 이상으로 제한
birthYear int CHECK(birthYear >= 1900)

#Age 값을 1 이상 150 이하로 제한
Age int CHECK(Age between 1 and 150)

 

 

제약조건의 설정

1. 속성에 제약조건 지정하기

CREATE TABLE 테이블명(
속성명 속성타입 [CONSTRAINT [제약조건명] 제약조건],
속성명 속성타입,
...
)

예시)

#id를 기본키로 갖는 customer 테이블 작성
CREATE TABLE customer(
id VARCHAR(20) CONSTRAINT PK_id PRIMARY KEY,
pwd VARCHAR(20) CONSTRAINT NN_pwd NOT NULL,
name VARCHAR(20) CONSTRAINT NN_name NOT NULL,
phone VARCHAR(11) NULL,
birthYear int NULL,
address VARCHAR(100) NULL
)

2. 테이블 수준의 제약조건 지정하기

복합키의 경우 여러개의 속성이 합쳐져서 키가 되기 때문에 속성 단위의 제약조건 설정으로는 표현할 수 없음

이 경우 테이블 수준에서 제약 조건을 지정해야함

CREATE TABLE 테이블명(
속성명 속성타입,
...
[CONSTRAINT 제약조건명] 제약조건(속성명)
)

예시)

#customer 테이블에 name과 phone이 합쳐진 복합키를 기본키로 설정함
CREATE TABLE customer(
name VARCHAR(20),
phone VARCHAR(11),
birthday DATETIME,
address VARCHAR(100)
CONSTRAINT custom_COMBO_PK PRIMARY KEY(name, phone)
Comments