관리 메뉴

JIE0025

[MySQL] 제약조건 본문

백엔드/데이터베이스

[MySQL] 제약조건

Kangjieun11 2021. 6. 4. 23:32
728x90

제약조건 (constraint)

- 데이터의 무결성을 지키기 위함이다.

- 제약 조건을 만족했을 때만 입력되도록 설정한다.

 

제약조건의 종류

- 기본키 제약 조건

- 외래키 제약 조건

- UNIQUE 제약 조건

- DEFAULT 제약 조건

- NULL 값 허용

 

 

 

1 . 기본키 제약 조건 (PRIMARY)

- 기본키(PRIMARY KEY) 입력값은 중복될 수 없고 NOT NULL이다.

 

테이블 생성시 제약조건 설정

CREATE TABLE userTBL
(
 userID CHAR(8) NOT NULL,
 userName VARCHAR(10) NOT NULL,
 birthYear INT NOT NULL,
 CONSTRAINT PRIMARY KEY pk_userTBL_userID (userID)
)

 

CONSTRAINT PRIMARY KEY : PK에 제약조건을 준다는 것

pk_userTBL_userID  : 제약조건 이름

(userID) : 제약조건을 설정할 열

 

  • 만들어진 테이블을 수정 할 떄도 제약 조건을 설정할 수 있다. 
CREATE TABLE userTBL
(
 userID CHAR(8) NOT NULL,
 userName VARCHAR(10) NOT NULL,
 birthYear INT NOT NULL,
)
ALTER TABLE userTBL
ADD CONSTRAINT pk_userTBL_userID 
PRIMARY KEY (userID);

 

  • 두개 이상의 열을 합쳐서 기본키로 설정할 수 도 있다.
CREATE TABLE prodTBL
(
 prodCode CHAR(3) NOT NULL,
 prodID CHAR(4) NOT NULL,
 prodDate DATETIME NOT NULL,
 prodState CHAR(10) NULL,
 CONSTRAINT pk_prodTBL_prodCode_prodID
 PRIMARY KEY  (prodCode, prodID)
);

 

 

 

2 . 외래키 제약 조건 (FOREIGN)

- 두 테이블 사이의 관계를 선언해서 데이터의 무결성을 보장

- 테이블 사이에 외래키 설정시 한 테이블이 다른 테이블에 의존한다.

- 외래키 테이블 : 외래키 정의 테이블

- 기준 테이블 : 외래키에 의해 참조 되는 테이블

- 외래키 테이블이 참조하는 기준 테이블의 열은 반드시 기본키(PK) , UNIQUE 제약조건이 설정되어 있어야 한다.

 

 

 

FOREIGN KEY (userID) 

외래키 제약 조건을 buyTBL (구매 테이블) 의 userID열에 설정한다. 

 

REFERENCES userTBL(userID);

참조하는 기준 테이블은 userTBL(회원 테이블) 의 userID열이다.

 

외래키 설정시 옵션을 사용할 수 있다.

ON DELETE CASCADE

ON UPDATE CASCADE

 

 

 

3 . UNIQUE 제약 조건 

- 중복되지 않는 유일한 값을 입력해야 하는 조건이다.

- 기본키 제약 조건과 비슷하지만 NULL값을 허용한다.

 

email 열을 추가하고, email열에 UNIQUE 제약조건 설정

 

CREATE TABLE userTBL
(
 userID CHAR(8) NOT NULL PRIMARY KEY,
 userName VARCHAR(10) NOT NULL,
 birthYear INT NOT NULL,
 email CHAR(30) NULL,
 CONSTRAINT Ak_email UNIQUE (email)
)

 

 

 

4. DEFAULT 제약 조건 

- 값을 입력하지 않았을 때 자동으로 입력되는 기본값을 정의

 

출생연도 입력을 안했으면 -1

주소 입력을 안했으면 '서울'

키를 입력하지 않았으면 170을 입력하는 구문이다.

 

CREATE TABLE userTBL
( userID CHAR(8) NOT NULL PRIMARY KEY,
userName VARCHAR(10) NOT NULL,
birthYear int NOT NULL DEFAULT -1,
addr CHAR(2) NOT NULL DEFAULT '서울’,
mobile1 CHAR(3) NULL,
mobile2 CHAR(8) NULL,
height smallint NULL DEFAULT 170,
mDate date NULL
);

 

  • ALTER문에서 DEFAULT 제약 조건 설정  : ALTER COLUMN 사용
CREATE TABLE userTBL
( userID CHAR(8) NOT NULL PRIMARY KEY,
userName VARCHAR(10) NOT NULL,
birthYear int NOT NULL ,
addr CHAR(2) NOT NULL ,
mobile1 CHAR(3) NULL,
mobile2 CHAR(8) NULL,
height smallint NULL,
mDate date NULL
);



ALTER TABLE userTBL
ALTER COLUMN birthYear SET DEFAULT -1;
ALTER TABLE userTBL
ALTER COLUMN addr SET DEFAULT '서울';
ALTER TABLE userTBL
ALTER COLUMN height SET DEFAULT 170;

 

입력 데이터가 default일때 DEFAULT문으로 설정한 값을 자동 입력함.

데이터 입력시 열 이름이 명시되어 있지 않으면, DEFAULT문으로 설정한 값을 자동 입력함.

 

값이 직접 명시되어 있으면 DEFAULT 설정 값 무시함.

 

 

 

5. NULL 허용 

- 테이블 정의할 때 NULL 값 입력을 허용하려면 NULL로 설정, 허용하지 않으려면 NOT NULL 설정

- 기본키에는 NULL값이 올 수 없으므로 자동으로 NOT NULL 인식

NULL : 아무것도 없다 : 0, 빈문자, 공백과 다르다!