티스토리 뷰

DataBase

제약조건 (CONSTRAINT)

절취선 2022. 9. 15. 23:55
반응형

제약조건 (CONSTRAINT)

데이터의 무결성을 지키기 위한 제한된 조건이다.

MySQL에서는 데이터의 무결성을 목적으로 아래 5가지의 제약 조건을 제공하고있다.

  • Primary Key
  • Foreign Key
  • Unique Key
  • Check Key
  • Default 정의
  • NULL 값 허용

Primary Key

단일 데이터의 행의 데이터를 구분할 수 있는 식별자이다.

create table userTBL(
userID char(8) NOT NULL PRIMARY KEY,
NAME VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL
);

Foreign Key

두 데이터 데이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할

create table userTBL(
userID char(8) NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL
);

create table buyTBL(
userID char(8) NOT NULL PRIMARY KEY,
prodname VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL
FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

Unique Key

중복되지 않는 유일한 값을 가지지만 PK와 다르게 NULL 값을 허용한다는 부분에서 차이를 보인다.

create table userTBL(
userID char(8) NOT NULL PRIMARY KEY,
NAME VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL,
email char(30) NULL UNOQUE
);

Check Key

입력되는 데이터를 점검하는 기능

생일 혹은 핸드폰 번호 등의 입력에 대한 점검을 수행할 수 있다.

create table userTBL(
userID char(8) NOT NULL PRIMARY KEY,
NAME VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL (birthYear >= 1900 AND birthYear <= 2023),
mobile1 char(30) NULL,
CONSTRAINT CK_name CHECK(name IS NOT NULL)
);
ALTER TABLE userTBL
    ADD CONSTRAINT CK_mobile1
    CHECK (mobile1 IN ('010','011','016','017'))

Default 정의

값을 입력하지 않았을 때, 자동으로 입력되는 기본 값을 정의한다.

create table userTBL(
userID char(8) NOT NULL PRIMARY KEY,
NAME VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL,
mobile1 char(30) NULL DEFAULT 010
);

CONSTRAINT 쿼리문

기존 쿼리를 생성할 경우 제약조건 입력은 해당 컬럼에 직접 적어주는 방식 이었다.
CONSTRAINT 쿼리문은 제약조건의 추가와 동시에 별칭을 변경할 수 있는 기능을 가지고 있다.

CREATE, ALTER(

 ...

[ADD] CONSTRAINT [별칭] | [제약조건](대상 컬럼);
);

그러나 제약 조건에 따라 추가 쿼리문의 형태가 달라진다.

FK의 경우에는참도 대상의 컬럼을 필요로 하기 때문에 REFERENCES [TABLE name](컬럼)

create table buyTBL(
userID char(8) NOT NULL PRIMARY KEY,
prodname VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL
FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

하나의 테이블에 PK가 두개 이상일 경우에는 ,로 컬럼을 추가해 주면된다.

CONSTRAINT [별칭] PRIMARY KEY (컬럼1, 컬럼2);

create table buyTBL(
userID char(8) NOT NULL PRIMARY KEY,
prodname VARCHAR(10) NOT NULL, 
birthYear INT NOT NULL
CONSTRAINT PK_proTBL_proCode_proID PRIMARY KEY (proCode, proID);
);
반응형

'DataBase' 카테고리의 다른 글

스핑크스 SQL의 특징과 문제점  (0) 2022.10.18
Common Table Expression  (0) 2022.09.17
DB 암호화 기법  (1) 2022.09.16
Union vs Union All 차이  (0) 2022.09.14
(N+1) Error  (0) 2022.02.26
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함