일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL
- 회고
- SW봉사
- programmers
- 정보처리산업기사
- 자바
- 스프링
- 백준알고리즘
- 코딩교육봉사
- 파이썬
- CJ UNIT
- 문제풀이
- 소프티어
- 백준
- softeer
- 데이터베이스
- 백준 알고리즘
- 코틀린
- 코딩봉사
- 시나공
- 공부일지
- 프로그래머스
- kotlin
- java
- 1과목
- BFS
- 알고리즘
- C++
- python
- MYSQL
- Today
- Total
JIE0025
[MySQL] 제약조건 본문
제약조건 (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, 빈문자, 공백과 다르다!
'백엔드 > 데이터베이스' 카테고리의 다른 글
[데이터모델링] E-R 다이어그램 - web에서 그리기 (2) | 2021.06.05 |
---|---|
[데이터모델링] ER모델 개념, IE표기법 (0) | 2021.06.05 |
[MySQL] 테이블 생성 (CREATE TABLE)과 옵션 (0) | 2021.06.04 |
[MySQL] 인덱스(index), 클러스터/보조인덱스 (4) | 2021.05.25 |
[MySQL] JOIN 개요 (0) | 2021.04.19 |