[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, 빈문자, 공백과 다르다!